不定长参数的装包与拆包

#转载请联系

 

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的代码

 

posted @ 2018-09-10 16:27  苦瓜爆炒牛肉  阅读(292)  评论(0编辑  收藏  举报