收藏官网首页
查看: 9433|回复: 0

理解 Python 中的 *args 和 **kwargs

17

主题

57

帖子

426

积分

版主

Rank: 7Rank: 7Rank: 7

积分
426
跳转到指定楼层
楼主
发表于 2015-11-11 17:13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如:
  1. def test_defargs(one, two = 2):
  2.     print 'Required argument: ', one
  3.     print 'Optional argument: ', two

  4. test_defargs(1)
  5. # result:
  6. # Required argument: 1
  7. # Optional argument: 2

  8. test_defargs(1, 3)
  9. # result:
  10. # Required argument: 1
  11. # Optional argument: 3
复制代码

当然,本文章的主题并不是讲默认参数,而是另外一种达到可变参数 (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. def test_args(first, second, third, fourth, fifth):
  2.         print 'First argument: ', first
  3.             print 'Second argument: ', second
  4.             print 'Third argument: ', third
  5.             print 'Fourth argument: ', fourth
  6.             print 'Fifth argument: ', fifth

  7. # Use *args
  8. args = [1, 2, 3, 4, 5]
  9. test_args(*args)
  10. # results:
  11. # First argument:  1
  12. # Second argument:  2
  13. # Third argument:  3
  14. # Fourth argument:  4
  15. # Fifth argument:  5

  16. # Use **kwargs
  17. kwargs = {
  18.             'first': 1,
  19.             'second': 2,
  20.             'third': 3,
  21.             'fourth': 4,
  22.             'fifth': 5
  23.         }

  24. test_args(**kwargs)
  25. # results:
  26. # First argument:  1
  27. # Second argument:  2
  28. # Third argument:  3
  29. # Fourth argument:  4
  30. # Fifth argument:  5
复制代码
使用*args和**kwargs可以非常方便的定义函数,同时可以加强扩展性,以便日后的代码维护。

本文转自:http://kodango.com/variable-arguments-in-python




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表