IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Python:流程控制、函数方法 -> 正文阅读

[开发工具]Python:流程控制、函数方法

1,流程控制

1.1,顺序结构

1.1.1,if分支结构

if分支使用布尔表达式或布尔值作为分支条件来进行分支控制。

#第一种形式
if expression:
    statement...
#第二种形式
if expression:
    statement...
else:
    statement...
#第三种形式
if expression:
    statement...
elif expression:
    statement...
elif expression:
    statement...

注意:Python是一门很独特的语言,它的代码是通过缩进来标记的,具有相同缩进的多行代码属于同一个代码块。如果代码莫名其妙地乱缩进,Python解释器会报错。

如果忘记缩进,就不是代码块:

age = 22
if age >20:
    print(age)
print("你已经是叔叔了")

如果随意缩进,将会报错:

age = 22
if age >20:
    print(age)
   print("你已经是叔叔了")

1.1.2,if条件的类型

Python执行if语句时,会判断if条件是True还是False。但实际上,if条件可以是任意类型,当下面的值作为bool表达式、空字典等都会被当作False处理。

False、None、0、""、()、[]、{}

除了False本身,各种代表“空”的None、空字符串、空元祖、空列表、空字典都会被当成False处理。

s = ""
if s:
    print("s不为空")
else:
    print("s不能为空")

1.1.3,pass语句

Python的pass语句就是空语句,有时候程序需要占一位、放一条语句,但又不希望这条语句做任何事情,此时就可通过pass语句来实现。通过使用pass语句,可以让程序更完整。

s = "1"
if s:
    pass
else:
    print("s不能为空")

1.2,断言

断言语句和if分治有点类似,它用于对一个bool表达式进行断言,如果该bool表达式为True,该程序可以继续向下执行;否则程序会引发AssertionError错误。

a = input("年龄:")
a = int(a)
assert 20 < a < 80
print("年龄正常")
==================
年龄:1
Traceback (most recent call last):
  File "E:/Pycharm/WorkSpace/Study/main.py", line 3, in <module>
    assert 20 < a < 80
AssertionError

1.3,循环结构

1.3.1,while循环

while循环的语法格式如下:

[init_statements]
while test_expression:
    body_statements
    [iteration_statements]

如果循环条件为True,会导致这个循环永远无法结束。?

i = 0
while i < 10:
    print(i)
    i += 1
print("结束循环")

1.3.2,使用while循环遍历列表和元组

由于列表和元组都是有索引的,因此程序可通过while循环、列表或元组的索引来比那里列表和元素中的所有元素。

a = ("燕双嘤", "杜马", "陈恭鹏")
i = 0
while i < len(a):
    print(a[i])
    i += 1

1.3.3,循环使用else

Python的循环可以定义else代码块,当循环条件为False时,程序会执行else代码块。

i = 0
while i < 5:
    print(i)
    i += 1
else:
    print("大于或等于5")

1.3.4,for-in循环

for-in循环专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素。for-in循环的语法格式如下:

for 变量 in 字符串|范围|集合等:
    statement

for-in循环中的变量的值受for-in循环控制,该变量将会在每次循环开始时自动被赋值,因此程序不应该在循环中对该变量赋值。

for-in循环可用于遍历任何可迭代的对象。所谓迭代对象,就是指该对象中包含一个_iter_方法,且该方法的返回值对象具有next()方法。

for i in range(1,10,1):
    print(i)

PS:for-in循环的循环计数器赋值在语法上是允许的,但是没有什么意义。?

1.3.5,使用for-in循环遍历列表和元组

在使用for-in循环遍历列表和元组时,列表或元组有几个元素,for-in循环的循环体就执行几次,针对每个元素执行一次,循环计数器会一次被赋值为元素的值。

a = ("燕双嘤","杜马","步鹰")
for i in a:
    print(i)
for i in range(0,len(a)):
    print(a[i])

1.3.6,使用for-in循环遍历字典

使用for-in循环遍历字典其实也是通过遍历普通列表来实现的。通过以下方法:

  • items():返回字典中所有key-value的列表。
  • keys():返回字典中所有key的列表。
  • values():返回字典中所有value的列表。
a = {"name": "燕双嘤", "sex": "男", "age": 22}
for key,value in a.items():
    print(key,value)
    print(key,a[key])

1.4,控制循环结构

1.4.1,使用break结束循环

某些时候,需要在某种添加出现时强制中止循环,而不是等到循环条件为False时才退出循环。此时可以使用break来完成这个功能。break用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break,系统就将完全结束该循环,开始执行循环之后的代码。双层循环之跳出内层循环体。

for i in range(0,100):
    print(i)
    if i == 10:
        break

1.4.2,使用continue忽略本次循环的剩下语句

continue的功能和break有点类似,区别是continue知识忽略当次循环的剩下语句,接着下一次循环,并不会中止循环;而break则是完全中止循环本身。

for i in range(0,100):
    print(i)
    if i == 10:
        continue
        print(123)

1.4.3,使用return结束方法

return用于从包围它的最直接方法、函数或匿名函数返回。当函数或方法执行到一条return语句时,这个函数或方法将被结束。Python程序中大部分循环都被放在函数或方法中执行,一旦在循环体内执行到一条return语句时,retrun语句就会结束该函数或方法,循环自然也随之结束。

def test():
    for i in range(0, 100):
        print(i)
        if i == 10:
            return
            print(123)
if __name__ == '__main__':
    test()

2,函数

2.1,函数的定义和调用

2.1.1,定义函数

定义函数的语法格式如下:

def 函数名(形参列表):
    //由零条到多条可执行语句组成的函数
    [return [返回值]]

Python声明函数必须使用def关键字,对函数语法格式的详细说明:

  • 函数名:从语法角度来看,函数名只要是一个合法的标识即可;从程序的可读性角度来看,函数名应该由一个或多个有意义的单词组成,每个单词的字母全部小写,单词与单词之间使用下划线分隔。
  • 形参列表:用于定义该函数可以接收的参数。形参列表由多个形参名组成,多个形参名之间以英文逗号(,)隔开。
def demo(x):
    print("燕双嘤"+str(x))
    return "哈哈哈"
print(demo("NB"))

2.1.2,多个返回值

如果程序需要有多个返回值,则既可将多个值包装成列表之后返回,也可直接返回多个值。如果Python函数值直接返回了多个值,Python会自动将多个返回值封装成元组。

def demo():
    print("燕双嘤")
    return "哈哈哈","嘤嘤嘤"
print(demo())
==========================
燕双嘤
('哈哈哈', '嘤嘤嘤')

2.2,函数的参数

2.2.1,关键字参数

按照形参位置传入参数被称为位置参数。如果使用位置参数的方式传入参数值,则必须严格按照定义函数时指定的顺序来传入参数值;如果根据参数名来传入参数值,则无须遵守定义形参的顺序,这种方式被称为关键字参数。

def demo(str1, str2):
    print(str1, str2)
    return "哈哈哈"


print(demo("燕双嘤", "NB"))
print(demo(str2="燕双嘤", str1="NB"))
==========================
燕双嘤 NB
哈哈哈
NB 燕双嘤
哈哈哈

2.2.2,参数默认值

在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值——这样在调用函数式就可以省略为该形参传入参数值,而是直接使用该形参的默认值。

def demo(str,sex="男"):
    return "姓名:"+str+",性别:"+sex


print(demo("燕双嘤"))

PS:多个参数时,有默认值的参数必须放在无默认值参数的后面。上面的str和sex就无法互换。

2.2.3,可变参数

Python允许在形参前面添加一个星号(*),这样就意味着该参数可接收多个参数值,多个参数值被当成元组传入。

def demo(a,*b):
    print(a)
    for i in b:
        print(i)
demo("燕双嘤",1,2,3,4,5)
=======================
燕双嘤
1
2
3
4
5

PS:Python允许可变参数出现在列表的任何位置,但Python要求函数最多只能带一个支持“普通”参数收集的形参。

def demo(*b,a):
    print(a)
    for i in b:
        print(i)
demo("燕双嘤",1,2,3,4,a=5)

demo()函数的第一个参数就是个数可变的形参,由于该参数可接收个数不等的参数值,因此如果需要给后面的参数传入参数值,则必须使用关键字参数;否则,程序会把所传入的多个值都当成是传给b参数的。

Python还可以收集关键字参数,此时Python会将这种关键字参数收集字典。为了让Python能收集关键字参数,需要在参数前面添加两个星号。在这种情况下,一个函数可同时包含一个支持“普通”参数收集的参数和一个支持关键字参数收集的参数。

def test(x, y, z=3, *names, **party):
    print(x, y, z)
    print(names)
    print(party)


test(1, 2, 3, "燕双嘤", "杜马", 党派1="共产党", 党派2="国民党")
==================================================
1 2 3
('燕双嘤', '杜马')
{'党派1': '共产党', '党派2': '国民党'}

如果想让z参数的默认值发挥作用,则需要只传入两个位置参数。

test(1, 2, 3, 党派1="共产党", 党派2="国民党")
==============================
1 2 3
()
{'党派1': '共产党', '党派2': '国民党'}

2.2.4,逆向参数收集

所谓逆向参数收集,指的是在程序已有列表、元组、字典等对象的前提下,把它们的元素“拆开”后传给函数的参数。

def test(num1,num2, *nums):
    print(num1)
    print(num2)
    print(nums)
list = [1, 2, 3]
test(*list)
======================
1
2
(3,)

2.2.5,函数传参机制(类似Java)

Python中函数的参数传递机制都是“值传递”,就是将实际参数值的副本传入函数,而参数本身不会受到任何影响。

def swap(a, b):
    a, b = b, a
    print("在swap函数里:", a, b)


a = 6
b = 9
swap(a, b)
print("交换结束后:", a, b)
==========================
在swap函数里: 9 6
交换结束后: 6 9

根据Python的参数传递机制,传入函数的只是参数的副本,因此程序在函数中对参数赋值并不会影响参数本身。如果参数本身是一个可变对象(列表、字典),此时虽然Python采用的也是值传递方式,但是会修改可变对象。

def swap(ab):
    ab['a'], ab['b'] = ab['b'], ab['a']
    print(ab["a"], ab["b"])
ab = {"a":6,"b":9}
swap(ab)
print(ab["a"], ab["b"])
==============================
9 6
9 6

2.2.6,变量作用域

在程序定义一个变量时,这个变量是有作用范围的,变量的作用范围被称为它的作用域。根据定义变量的位置,变量分为两种:

  • 局部变量:在函数中定义的变量,包括参数,都被称为局部变量。每个函数在执行时,系统都会为该函数分配一块“临时内存空间”,所有的局部变量都被保存在这块临时内存空间内。当函数执行完成后,这块内存空间就被释放了,这些局部变量也就失效了,因此离开函数之后就不能再访问局部变量了。
  • 全局变量:在函数外面、全局范围内定义的变量,都被称为全局变量。全局变量意味着它们可以在所有函数内被访问。

此外,Python提供了如下三个工具函数来获取指定范围内的“变量字典”:

  • globals():该函数返回全局范围内所有变量组成的“变量字典”。
  • locals():该函数返回当前局部返回内所有变量组成的“变量字典”。
  • vars(object):获取在指定对象范围内所有变量组成的“变量字典”。如果不传入object参数,vars()和locals()的作用完全相同。

globals()locals()看似完全不同,但它们实际上也是有联系的,关于这两个函数的区别如下:

  • locals()总是获取当前局部范围内所有变量组成的“变量字典”,因此,如果在全局范围内调用locals()函数,同样会获取全局范围内所有变量组成的“变量字典”;而globals()无论在哪里执行,总是获取全局范围内所有变量组成的“变量字典”。
  • 一般来说,使用locals()和globals()获取的“变量字典”只应该被访问,不应该被修改。但实际上,不管是使用globals()还是使用locals()获取的全局范围内的“变量字典”,都可以被修改,而这种修改回真正改变全局变量本身;但通过locals()获取的局部范围内的“变量字典”,即使对它修改也不会影响局部变量。
def test():
    age = 20
    print(age)
    print(locals())
    locals()['age'] = 12
    print(age)
    globals()['x'] = 19

test()
x = 5
y = 20
print(globals())
print(locals())
print(x)
print(globals()['x'])
globals()['x'] = 39
print(x)
locals()['x'] = 99
print(x)
======================
20
{'age': 20}
20
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000017A902DC1D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/Pycharm/WorkSpace/Study/main.py', '__cached__': None, 'test': <function test at 0x0000017A901D1EA0>, 'x': 5, 'y': 20}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000017A902DC1D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/Pycharm/WorkSpace/Study/main.py', '__cached__': None, 'test': <function test at 0x0000017A901D1EA0>, 'x': 5, 'y': 20}
5
5
39
99

在函数中声明全局变量

name = "燕双嘤"

def test():
    global name
    print(name)
    name = "杜马"

test()
print(name)
=================
燕双嘤
杜马

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:30:38  更:2021-09-29 10:31:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 9:39:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计