args 和 kwargs

有幾點需要注意:

  1. 名稱 argskwargs 按慣例使用,它們不是語言規範的一部分。因此,這些是等價的:

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

     def func(*a, **b):
         print(a)
         print(b)
    
  2. 你可能沒有多個 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
    
  3. 如果任何位置引數跟隨*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
    
  4. **kwargs 必須在引數列表中排在最後。

     def test(**kwargs, *args):
     #   File "<stdin>", line 1
     #     def test(**kwargs, *args):
     #                      ^
     # SyntaxError: invalid syntax