解包函式引數
如果要建立一個可以接受任意數量引數的函式,而不是在編譯時強制執行引數的位置或名稱,那麼可能的方法如下:
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)