Python中函数的参数定义和可变参数用法实例分析
本篇章节讲解Python中函数的参数定义和可变参数用法。分享给大家供大家参考。具体如下: 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args,**kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。 先说说函数定义,我们都知道,下面的代码定义了一个函数funcA def funcA(): pass 显然,函数funcA没有参数(同时啥也不干:D)。 下面这个函数funcB就有两个参数了, def funcB(a,b): print a print b 调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100,99),执行结果是: 100 很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的: TypeError: funcB() takes exactly 2 arguments (1 given) 我们可以在函数定义中使用参数默认值,比如 def funcC(a,b=0): print a print b 在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0。 OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。看一个例子 def funcD(a,b,*c): print a print b print "length of c is: %d " % len(c) print c 调用funcD(1,2,3,4,5,6)结果是 1 我们看到,前面两个参数被a、b接受了,剩下的4个参数,全部被c接受了,c在这里是一个tuple。我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple。 好了,一颗星我们弄清楚了,下面轮到两颗星。 上面的例子里,调用函数的时候,传递的参数都是根据位置来跟函数定义里的参数表匹配的,比如funcB(100,99)和funcB(99,100)的执行结果是不一样的。在Python里,还支持一种用关键字参数(keyword argument)调用函数的办法,也就是在调用函数的时候,明确指定参数值付给那个形参。比如还是上面的funcB(a,b),我们通过这两种方式调用 结果跟funcB(100,99)都是一样的,因为我们在使用关键字参数调用的时候,指定了把100赋值给a,99赋值给b。也就是说,关键字参数可以让我们在调用函数的时候打乱参数传递的顺序! 另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如 def funcE(a,c): print a print b print c 调用funcE(100,99,98)和调用funcE(100,c=98,b=99)的结果是一样的。 好了,经过以上铺垫,两颗星总算可以出场了: def funcF(a,**b): print a for x in b: print x + ": " + str(b[x]) 调用funcF(100,c='你好',b=200),执行结果 100 大家可以看到,b是一个dict对象实例,它接受了关键字参数b和c。 常规参数,*参数及**参数可以同时使用,具体怎么用?看看Python Reference Manual吧,关于Function definitions的那些章节。其实,笨想也能猜出来啊,o(∩_∩)o... 希望本文所述对大家的Python程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |