免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3631 | 回复: 4
打印 上一主题 下一主题

Python tips: 什么是*args和**kwargs [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-22 10:47 |只看该作者 |倒序浏览
Python tips: 什么是*args和**kwargs





先来看个例子:
  1. def foo(*args, **kwargs):
  2.     print 'args = ', args
  3.     print 'kwargs = ', kwargs
  4.     print '---------------------------------------'
  5. if __name__ == '__main__':
  6.     foo(1,2,3,4)
  7.     foo(a=1,b=2,c=3)
  8.     foo(1,2,3,4, a=1,b=2,c=3)
  9.     foo('a', 1, None, a=1, b='2', c=3)输出结果如下:
  10. args =  (1, 2, 3, 4)
  11. kwargs =  {}
  12. ---------------------------------------
  13. args =  ()
  14. kwargs =  {'a': 1, 'c': 3, 'b': 2}
  15. ---------------------------------------
  16. args =  (1, 2, 3, 4)
  17. kwargs =  {'a': 1, 'c': 3, 'b': 2}
  18. ---------------------------------------
  19. args =  ('a', 1, None)
  20. kwargs =  {'a': 1, 'c': 3, 'b': '2'}
  21. ---------------------------------------
复制代码
可以看到,这两个是python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。

呵呵,知道*args和**kwargs是什么了吧。还有一个很漂亮的用法,就是创建字典:
  1. def kw_dict(**kwargs):
  2.         return kwargs
  3.     print kw_dict(a=1,b=2,c=3) == {'a':1, 'b':2, 'c':3}
复制代码
其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。

“人生苦短,我用python。”


本文来自itlong.com,如果查看原文请点:http://blog.itlong.com/u1/59571/showart_2071017.html

论坛徽章:
0
2 [报告]
发表于 2011-02-22 11:22 |只看该作者
好贴

论坛徽章:
0
3 [报告]
发表于 2011-02-22 15:15 |只看该作者
回复 2# hlsd665


    咋把大世兄弄成这样了啊!

论坛徽章:
0
4 [报告]
发表于 2011-02-26 14:37 |只看该作者
关于“什么是*args和**kwargs”详细点的用法可以看《python核心编程》第11章

论坛徽章:
0
5 [报告]
发表于 2011-02-26 14:55 |只看该作者
给多个简单的例子:
  1. #@Function:"example of  function argument"
  2. #@Author:** @Date:02252011 @Version:v1.0

  3. def f1(a,*b,**c):
  4.     print "a is : ",a
  5.     print "b has : ",
  6.     for i in b:
  7.         print i,
  8.     print
  9.     for i in c.keys():
  10.         print i, " = ", c[i]
  11.         
  12.    

  13. def main():
  14.     print "example1 of function argument "
  15.     f1(1,2,3,4,5,argv1=100,argv2=200,argv3=300)
  16.     print
  17.     print "example2 of function argument "
  18.     dictionary = {"argv1":100,"argv2":200,"argv3":300}
  19.     unit = (2,3,4,5)
  20.     f1(1,*unit,**dictionary)
  21.    
  22. if __name__ == "__main__":
  23.     main()
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP