3.6. 参数的解包,逆向收集

* 可以收集元祖,进行传参

** 可以收集字典,进行传参

3.6.1. 演示一个小例子

In [48]: x,y,z = 1,2,3
In [49]: x
Out[49]: 1
In [50]: y
Out[50]: 2
In [51]: z
Out[51]: 3

In [54]: def func1(x,y,z):
   ....:     return x+y+z
   ....:

In [56]: tuple1 = (1,2,3)
In [57]: func1(*tuple1)
Out[57]: 6

代码示例

#!/usr/bin/env python
#-*- coding:utf8 -*-
'''
拆解元祖    提供位置参数
拆解字典    提供关键字参数
'''

def mysum(a,b):
    return a+b

print("拆解元祖调用:")
print(mysum(*(3, 4)))        #调用时拆解元祖作为位置参数
print("拆解字典调用:")
print(mysum(**{'a':3,'b':4}))   #调用时拆解字典作为关键字参数

代码示例

#*args元祖解包
In [6]: def func(a,b,c,d):
   ...:     print(a,b,c,d)
   ...:

In [7]: args = (1,2)

In [8]: args +=(3,4)

In [9]: func(*args)
1 2 3 4



#**args字典解包
In [6]: def func(a,b,c,d):
   ...:     print(a,b,c,d)
   ...:

In [10]: args = {'a':1,"b":2,"c":3}

In [11]: args['d']=4

In [12]: func(**args)
1 2 3 4



#*args和**args 任意参数合用
In [3]:  def func(a,b,c,d):
   ...:      print(a,b,c,d)
   ...:
   ...:

In [4]: func(1,*(2,3),**{"d":4})
1 2 3 4

In [5]: func(*(1,2),**{"c":7,"d":8})
1 2 7 8

In [8]: func(1,*(2,),c=3,**{"d":4})
1 2 3 4

In [9]: func(1,c=10,*(2,),**{"d":4})
1 2 10 4
def foo(name, *nams):
    print("name参数:", name)
    print("nams参数:", nams)


my_tuple = (1, 2, 3, 4)

foo("hujianli", *my_tuple)

输出结果

name参数: hujianli
nams参数: (1, 2, 3, 4)