#转载请联系
def task(a,b,c,*args,**kwargs): print(a) print(b) print(c) print(args) print(kwargs) task(1,2,3,4,5,6,name="chichung",age=22) 输出: 1 2 3 (4, 5, 6) {'age': 22, 'name': 'chichung'}
编写函数时,如果没办法预计用户传入的参数有多少个,可以用装包的方式。在进行数据的处理时,把包拆开,语法上就是把前面的*去掉。如果没有把*去掉会出现什么问题呢?
def task(a,b,c,*args,**kwargs): print(a) print(b) print(c) print(*args) # print(**kwargs) task(1,2,3,4,5,6,name="chichung",age=22) 输出: 1 2 3 4 5 6 # 一个这样的东西,没有逗号
def task(a,b,c,*args,**kwargs): print(a) print(b) print(c) # print(*args) print(**kwargs) task(1,2,3,4,5,6,name="chichung",age 输出: 1 2 3 Traceback (most recent call last): File "/home/chichung/桌面/不定长参数的装包与拆包.py", line 8, in <module> task(1,2,3,4,5,6,name="chichung",age=22) File "/home/chichung/桌面/不定长参数的装包与拆包.py", line 6, in task print(**kwargs) TypeError: 'age' is an invalid keyword argument for this function
至于为什么去掉**kwargs的*会报错呢?我暂时也不知道原因- -|
现在有一个需求,task()函数里面还要再写一个函数,而且这个函数也要接收和task()函数一模一样的参数,怎么该做呢?
很简单
def task(a,b,c,*args,**kwargs): #task的代码 task2(a,b,c,*args,**kwargs) # 注意是有*号的。 def task2(a,b,c,*args,**kwargs): #task2的代码