免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3358 | 回复: 4

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

论坛徽章:
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
发表于 2011-02-22 11:22 |显示全部楼层
好贴

论坛徽章:
0
发表于 2011-02-22 15:15 |显示全部楼层
回复 2# hlsd665


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

论坛徽章:
0
发表于 2011-02-26 14:37 |显示全部楼层
关于“什么是*args和**kwargs”详细点的用法可以看《python核心编程》第11章

论坛徽章:
0
发表于 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()
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

ITPUB技术栈

ITPUB技术栈是ITPUB企业打造的垂直于IT领域的知识社群平台,在这里,你既可以是创作者也可以是消费者。如果你的IT生涯丰富多彩,喷薄的个人价值尽可在小栈内体现;如果你渴望找到志同道合的伙伴,拓宽人脉,小栈比跑会场更快。 小栈特色:
1.极高的用户转化率,实现更直接的知识变现;
2.随时随地,刷个朋友圈的时间,实现更长效的信息沉淀;
3.戳痛、难点的专业咨询,更接近成功解决方案的时刻;
4.贴近意见领袖,个人高速成长,迈入更富有价值的人际圈。

----------------------------------------

技术小栈>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP