#默认参数的值是在一开始定义的时候就传给了函数, # 在后来的修改中不会被修改. #默认参数的值必须放到位置形参参数的最后面 #默认参数使用的场景是一个参数不经常变得场景,所以参数一般是不可变类型.字符串 元祖 数字 res=1 def foo(x,y=res): print(x,y) res=10 foo("aaa")
#结果是
aaa 1
def foo(x,y,*t): print(x,y) print(*t) #(3, 4, 5) foo(1,2,3,4,5)
#结果是:
3 4 5
#t=(2,3,4) #星会将接受的多余的参数转化为元祖赋值给t
第十节
#===================第十节 #3.传克打散的参数 def foo(x,y,*t): print(x,y) print(t) # foo(1,2,3,4,5) foo(1,2,*[‘a‘,‘b‘,‘c‘]) #这里的*[‘a‘,‘b‘,‘c‘] 代表将列表打散成多个参数传递给函数. #以后只要见到星表示 处理的是位置参数 # 4.可变长参数 #在调用阶段 实参的个数不固定,所以形参的个数也不固定 #形参的解决方式*一个星表示位置实参传的超出的部分,** 表示 关键字实参传递的参数超出的部分. #t=(2,3,4) #星会将接受的多余的参数转化为元祖赋值给t def foo(x,y,*t): print(x,y) print(t) # foo(1,2,3,4,5) foo(1,2,*[‘a‘,‘b‘,‘c‘]) #(‘a‘, ‘b‘, ‘c‘) foo(*[‘a‘,‘b‘,‘c‘,‘d‘]) #(‘c‘, ‘d‘) # 5.元祖也可以 def foo(x,y): print(x,y) foo(*(1,2)) #1 2 # 6. 约定俗称大家一般写*args代表位置参数 **kwargs 表示关键字参数.实际上这两个单词可以随便写,约定俗成这么写. # 关键字无固定个数穿参数 def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(x=111,y=444,a=11,b=33,c=44,d=55,cc=99,dd=88) #####字典关键字的参数打散 def foo(x,y,**kwargs): print(x,y) print(kwargs) foo(**{‘a‘:11,‘b‘:‘22‘,‘d‘:44,‘x‘:334,‘y‘:56}) #关键字传参数解压 def foo(x,y): print(x,y) foo(**{‘x‘:11,‘y‘:22}) #位置参数和关键字参数都不固定的传参数 def foo(*args,**kwargs): print(args) #这里收到一个元祖 print(kwargs) #这里收到的是一个字典 foo(1,2,3,4,**{‘x‘:11,‘y‘:22}) (1, 2, 3, 4) {‘x‘: 11, ‘y‘: 22} #将接收到的参数原封不动的传到最终调用的函数. def wrapper(x,y,z): print(x,y,z) def foo(*args,**kwargs): #封装成元祖和字典 wrapper(*args,**kwargs) #解压成各个参数表示将接收到的参数原封不动的传到最终调用的函数 foo(1,y=2,z=3) #7. 命名关键字参数表示定义在*之后的参数,该参数必须被传值.必须是key value的形式传值. #* 后面的 y 和 z就是命名关键字参数 def wrapper(x,*,y,z): print(x,y,z) wrapper(1,y=2,z=3)