1.函数的动态参数:
1.*args 位置参数动态传参
1 def fun(a,b,c,d,e):2 print(a,b,c,d,e)3 fun(1,2,3,4,5)
结果:1 2 3 4 5
顺序:位置参数=>*args=>默认值参数
*在这里表示接收位置参数的动态传参,接收到的是元组
1 def fun(a,*b,c=5): #参数名是b,*表示动态传参2 print(a)3 print(b)4 print(c)5 fun(1,2,3,4)
结果为:1
2 3 4
5
将第一个值赋值给a,后面的值都给b
2.**kwargs 关键字参数动态传参
1 def fun(a,**kwargs):2 print(a)3 print(args)4 fun(1,b=2,c=3)
结果为:
1
{'b':1,'c':2}
**在这里表示的是接收关键字的动态传参,接收到的是字典
顺序:位置参数,*args,默认值参数,**kwargs
以上参数可以随意搭配使用
1 def fun(a, *args, c="哈哈", **kwargs):2 print(a, args, c, kwargs)3 fun(1, 2, 3, 4,5, 6)
结果为:
1,(2,3,4,5,6),哈哈,{}
单行注释#
多行注释''' '''
1 def fun(a,b):2 """3 #这个函数是用来计算a和b的和4 :param a:#第一个数据5 :param b:#第二个数据6 :return:#返回的是两个数的和7 """8 return a+b9 fun(1,2)
接收所有参数
def fun(*args,**kwargs):
print(args,kwargs)
fun(1,2,3,a=4,b=5)
*在形参位置:聚合(位置参数)
1 def fun(*lst):2 print(lst)3 4 lst = [1,2,3,4,5]5 fun(lst)
结果为:([1,2,3,4,5])
*在实参位置:打散
1 def fun(*lst):2 print(lst)3 4 lst = [1,2,3,4,5]5 fun(*lst)#把list,tuple,set,str进行迭代打散
结果为:(1,2,3,4,5)
**在形参位置(聚合成关键字参数)
1 def fun(**kwargs):2 print(kwargs)3 dic = { "name":"abc","age":18}4 fun(**dic)#**在实参位置打散成关键字参数
结果为:
{"name":"abc","age":18}
2.命名空间
1.内置名称空间
2.全局名称空间
3.局部名称空间
1 a = 10#全局名称空间 2 def fun():#fn也在全局名称空间3 b = 20#局部名称空间4 print(a)5 fun()
globals()可以查看全局作用域中的内容
locals()可以查看当前作用域中的内容
3.global和nonlocal
global:
1 a = 10#全局变量,本身不安全,不能随意修改2 def fun():3 global a# 1.可以把全局中的内容引入到函数内部,2.在全局创建一个变量4 a = 205 a += 106 print(a)7 fun()
nonlocal:
1 a = 102 def outer():3 def inner(): #在inner中改变a的值4 nonlocal a #寻找外层函数中离他最近的那个变量5 a = 206 inner()7 outer()
函数可以互相嵌套