解包函式引數

如果要建立一個可以接受任意數量引數的函式,而不是在編譯時強制執行引數的位置或名稱,那麼可能的方法如下:

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)