Python基础函数
一、函数的定义
def是python中定义函数的关键字
# 首先了解函数是(完成一件事)以功能为导向,一个函数为一个功能.(减少代码重复性) # 例:注册、登录、len等操作,增强代码可读性 # 写完函数,程序是不执行的,使用函数名()来调用函数 def f(): print("aaa") print("xxx") print("yyy") f() # 当执行函数的时候,函数默认是有返回值,默认为None # return不写默认为None,当执行到return的时候后面不在执行,类似break def function(): print("aaa") print("xxx") print("yyy") return "It's OK" #当存在多个返回值时,是以元组方式返回 function() print(function()) # 当retur后面有一个值的时候,返回这个值.当有多个值的时候返回一个元组
二、函数的参数
函数的参数就是在函数名后面括号里面的一个参数
def f(a): print("xxx") print(a) print("OK") f("Its Ok")
2.1、参数的分类
形参:写在函数声明的位置为形参,形式上表示完整的
实参:在函数调用的时候给函传递的值为实参
传参:在调用函数的时候给实参给形参传递参数的过程为传参
# 位置参数,按照位置来赋值 def f(x, y): z = x + y return z print(f(3, 7)) # 编写函数传递函数,比较两个参数大小 def f(x, y): if x > y: return x else: return y print(f(3, 9)) # 此上面写法有点麻烦,使用三元运算符 def f(x, y): z = x if x > y else y return z print(f(4, 7))
# 当定义的参数非常多的时候,关python提供一种键字参数 # 关键字参数 不需要记住每个参数位置,只需要知道参数就可以(一一对应) def f(a, b, c): print(a) print(b) print(c) print(f(a="11111", b="22222", c="3333"))
# 混合参数就是位置参数和关键子参数混合使用 # 当在调用当时候可以给出位置参数, 或者指定关键字参数 # 在传参的时候位置参数必须和形参里面的位置参数相对应 def f(a, b, c): print(a) print(b) print(c) print(f("111", b="222", c=200))
三、动态参数
当传入很多参数,或者不指定传入来那些参数时,需考虑使用动态传参
# 在参数位置使用*号表示接受任意参数 # 其中结果为 返回一下元组 def f(*args): print(*args) print(f("x", "y", "z")) # 当存在位置参数和动态参数时,位置参数必须在动态参数前面 # 否则动态参数会把所有位置参数都给接收 def f(x, y, *args, z="666"): print(x, y, *args, z) print(f(1, 2, "aaaaa")) # 当在形参存在默认参数时候,在动态参数后面,不给出关键字传参.默认也是会生效当的 # 形参的顺序: 位置参数,动态参数,默认参数
在python中动态可以接收位置参数只能通用*来表示,无法接收关键字参数,那python又提供一个**用来接收关键字参数
# 接收关键字参数用**表示 # **kwargs默认是输出是字典格式 def f(**kwargs): print(*kwargs) #默认输出是字典格式,如此添加*号为字典都key值 print(f(x=1,y=2,z=3)) # 动态接收参数顺序:动态位置参数,默认值参数,动态关键字参数 # 当想接收所有参数时,可以使用动态位置参数和动态关键字参数搭配使用 def f(*args,**kwargs): print(args,kwargs) print(f(1,2,3,4,x="aaaa",y="bbbbb"))
四、函数的注释
def logo(*args,**kwargs): """ 函数此为登录系统 #描述此函数 :param args: #描述参数的意思 :param kwargs: #描述参数的意思 :return: #执行完后返回调用值 """ print(args,kwargs)
五、名称空间
名称空间分为三种:内置命名空间,全局命名空间,局部命名空间。
内置命名空间:存放在python解释器提供的名字,例list、dict、str、int等都是内置命名空间
全局命名空间:在python文件中,函数以外的都属于全局命名空间
局部命名空间:在函数中声明得变量都属于局部命名空间
5.1、内置命名空间加载的顺序
加载顺序:
内置命名空间
全局命名空间
局部命名空间
取之顺讯:
局部命名空间
全局命名空间
内置命名空间
x = 10 def f(): x = 20 print(x) print(f())
5.2、作用域
为作用的范围,按照生效的范围来划分:全局作用域,局部作用域
全局作用域:包括内置命名空间和全局命名空间,在整个文件中的任何位置都可以使用
局部作用域:在函数内部使用
六、gloabal、nonlocal
# globa表示不在使用局部作用域中都内容,而该用使用全局作用域变量 a = 10 def f(): global a a = 28 print(a) print(f())
# nonlocal表示只在局部空间内,只修改那个一层的,如果上一层没有变量就会往上一层找,只会找到函数最外层不会到全局进行修改 a = 10 def f(): a = 20 def l(): nonlocal a a = 30 print(a) l() print(a) print(f())