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+b 9 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 = 20 5 a += 10 6 print(a) 7 fun()
nonlocal:
1 a = 10 2 def outer(): 3 def inner(): #在inner中改变a的值 4 nonlocal a #寻找外层函数中离他最近的那个变量 5 a = 20 6 inner() 7 outer()
函数可以互相嵌套