args 和 kwargs
有幾點需要注意:
-
名稱
args
和kwargs
按慣例使用,它們不是語言規範的一部分。因此,這些是等價的:def func(*args, **kwargs): print(args) print(kwargs)
def func(*a, **b): print(a) print(b)
-
你可能沒有多個
args
或多個kwargs
引數(但不是必需的)def func(*args1, *args2): # File "<stdin>", line 1 # def test(*args1, *args2): # ^ # SyntaxError: invalid syntax
def test(**kwargs1, **kwargs2): # File "<stdin>", line 1 # def test(**kwargs1, **kwargs2): # ^ # SyntaxError: invalid syntax
-
如果任何位置引數跟隨
*args
,它們是隻能通過名稱傳遞的僅關鍵字引數。可以使用單個星代替*args
來強制值為關鍵字引數而不提供可變引數列表。僅關鍵字引數列表僅在 Python 3 中可用。def func(a, b, *args, x, y): print(a, b, args, x, y) func(1, 2, 3, 4, x=5, y=6) #>>> 1, 2, (3, 4), 5, 6
def func(a, b, *, x, y): print(a, b, x, y) func(1, 2, x=5, y=6) #>>> 1, 2, 5, 6
-
**kwargs
必須在引數列表中排在最後。def test(**kwargs, *args): # File "<stdin>", line 1 # def test(**kwargs, *args): # ^ # SyntaxError: invalid syntax