解包函数参数
如果要创建一个可以接受任意数量参数的函数,而不是在编译时强制执行参数的位置或名称,那么可能的方法如下:
def fun1(*args, **kwargs):
print(args, kwargs)
该*args
和**kwargs
参数被设置为一个特殊参数 tuple
和 dict
,分别为:
fun1(1,2,3)
# Prints: (1, 2, 3) {}
fun1(a=1, b=2, c=3)
# Prints: () {'a': 1, 'b': 2, 'c': 3}
fun1('x', 'y', 'z', a=1, b=2, c=3)
# Prints: ('x', 'y', 'z') {'a': 1, 'b': 2, 'c': 3}
如果你看一下足够的 Python 代码,你会很快发现它在将参数传递给另一个函数时被广泛使用。例如,如果要扩展字符串类:
class MyString(str):
def __init__(self, *args, **kwarg):
print('Constructing MyString')
super(MyString, self).__init__(*args, **kwarg)