python 可变参数函数定义* args和**kwargs的用法

时间:2023-03-08 15:28:16
python 可变参数函数定义* args和**kwargs的用法

python函数可变参数 (Variable Argument) 的方法:使用*args和**kwargs语法。其中,*args是可变的positional arguments列表,**kwargs是可变的keyword arguments列表。并且,*args必须位于**kwargs之前,因为positional arguments必须位于keyword arguments之前

下面一个例子使用*args,同时包含一个必须的参数:

  1. def test_args(first, *args):
  2. print 'Required argument: ', first
  3. for v in args:
  4. print 'Optional argument: ', v
  5. test_args(1, 2, 3, 4)
  6. # result:
  7. # Required argument: 1
  8. # Optional argument:  2
  9. # Optional argument:  3
  10. # Optional argument:  4

下面一个例子使用*kwargs, 同时包含一个必须的参数和*args列表:

  1. def test_kwargs(first, *args, **kwargs):
  2. print 'Required argument: ', first
  3. for v in args:
  4. print 'Optional argument (*args): ', v
  5. for k, v in kwargs.items():
  6. print 'Optional argument %s (*kwargs): %s' % (k, v)
  7. test_kwargs(1, 2, 3, 4, k1=5, k2=6)
  8. # results:
  9. # Required argument:  1
  10. # Optional argument (*args):  2
  11. # Optional argument (*args):  3
  12. # Optional argument (*args):  4
  13. # Optional argument k2 (*kwargs): 6
  14. # Optional argument k1 (*kwargs): 5

*args和**kwargs语法不仅可以在函数定义中使用,同样可以在函数调用的时候使用。不同的是,如果说在函数定义的位置使用*args和**kwargs是一个将参数pack的过程,那么在函数调用的时候就是一个将参数unpack的过程了。下面使用一个例子来加深理解:

  1. # Use *args
  2. args = [1, 2, 3, 4, 5]
  3. test_args(*args)
  4. # results:
  5. # First argument:  1
  6. # Second argument:  2
  7. # Third argument:  3
  8. # Fourth argument:  4
  9. # Fifth argument:  5
  10. # Use **kwargs
  11. kwargs = {
  12. 'first': 1,
  13. 'second': 2,
  14. 'third': 3,
  15. 'fourth': 4,
  16. 'fifth': 5
  17. }
  18. test_args(**kwargs)
  19. # results:
  20. # First argument:  1
  21. # Second argument:  2
  22. # Third argument:  3
  23. # Fourth argument:  4
  24. # Fifth argument:  5