解包函数参数

如果要创建一个可以接受任意数量参数的函数,而不是在编译时强制执行参数的位置或名称,那么可能的方法如下:

def fun1(*args, **kwargs):
    print(args, kwargs)

*args**kwargs 参数被设置为一个特殊参数 tupledict ,分别为:

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)