6

python 函数关键参数

© laowang/ 2011-6-8 / 21:02

一个朋友问我的问题:

我在学习python过程有各小问题,请您帮着解答:

我在交互模式中写了个函数:
def adder(**args):
sum=0
for x in args.keys():
sum+=args[x]
return sum

随后调用,在交互模式中输入 adder({'a':1,'b':2,'c':3})
为什么结果不是我所预期的求和呢? 而是报错。Traceback (most recent call last):
File "", line 1, in
adder({'a':1,'b':2,'c':3})
TypeError: adder() takes exactly 0 arguments (1 given)

按我的理解,函数adder开头的**args参数应该会收集后面所有的参数才是啊? 不知道哪里理解错了,请你帮着解答,谢谢

解决办法:

def adder(**args):
print args
sum=0
for x in args.keys():
sum+=args[x]
return sum

adder(a=1,b=2,c=3)

改成这样就可以了。

正如这个朋友说的一样,**args参数会收集关键词参数,但是传过去的函数参数应该是类似a=1这样类似的,而不是一个字典,但是在函数内部,可以看做一个字典,比如print args输出的参数。希望通过这个例子,对大家理解python 函数关键参数有帮助。
如果想要了解更多python 函数的话,可以看看python 函数返回值

文章链接:http://www.cnpythoner.com/post/pythonguanjian.html 转载请保留,谢谢!

作者:老王@python python 教程
老王python,提供python相关的python 书籍,python 主机,django 教程和python 下载,希望大家能够喜欢!

文章内容皆为人工编辑,如有错误,敬请指正。谢谢你关注

上一篇:  django sqlite数据库配置问题 下一篇:  python beautifulsoup多线程分析抓取网页

本文有 6 篇评论

  1. 1 ok 说 :
    2011-6-9 15:06:50
    avatar

    不怎么懂呀。在看practical django project,准备写一blog,很多不懂,希望能请教到斑竹。

    laowang 于 2011-6-11 15:20:56 回复
    恩,有不懂的可以发邮件给我。

  2. 2 Chang.Jian 说 :
    2011-7-25 17:12:51
    avatar

    闲逛,看到 有逛到 龙哥的blog了。

  3. 3 suzj 说 :
    2011-8-9 15:04:52
    avatar

    *arg:代表参数以元组形式传给函数.
    **args:代表参数以列表形式传给函数
    def typeTuple(arg1,*args):

    print type(args)

    调用 typeTuple("something","arg1","arg2","arg3")或者 typeTuple(arg1="something","arg1","arg2","arg3")。后面不可指定参数名

    def typeDict(arg2,**args):

    print type(args)

    调用typeDict("something",a=1,b=2,c=3)或者typeDict(arg2="something",a=1,b=2,c=3)。
    不能typeDict(arg2="something",{a=1,b=2,c=3}),但是可以这样typeDict(arg2="something",other_arg={a=1,b=2,c=3})

    组合在一起的。
    def onedef(*arg,**args):

    pass

    调用的时候可以onedef(1,2,3,a=1,b=2,c=3)或者onedef(1,2,3)或者onedef(a=1,b=2,c=3)。但是不能穿插数据。

  4. 4 suzj 说 :
    2011-8-9 15:05:51
    avatar

    哎呀,上面说错了。**args以字典形式传入

  5. 5 浮选机 说 :
    2011-8-12 11:15:44
    avatar

    支持支持。。

  6. 6 代孕网 说 :
    2011-8-15 16:41:02
    avatar

    强大的博主需要大家的关注啊!!!
    http://www.dywebsite.com

发表你的见解