Python的参数传递很有趣的样子,记一下。
位置参数
#位置参数,通过位置对应传递参数
>>>def try(name,age):
... first,second=name,age
... print 'first=%s,second=%d' % (first,second)
>>>try('sam',3)
>>>first=sam,second=3
#位置参数,若有默认参数而调用时没有给出,则使用默认值,若给出,则把默认值覆盖
>>>def try(name,age=12)
... first,second=name,age
... print 'first=%s,second=%d' % (first,second)
>>>try('sam')
>>>first=sam,second=12
>>>try('sam',21)
>>>first=sam,second=21
关键字参数
#关键字参数,通过位置对应传递参数
>>>def try(name,age):
... first,second=name,age
... print 'first=%s,second=%d' % (first,second)
>>>try(age=3,name='sam')
first=sam,second=3
#关键字参数,若有默认参数而调用时没有给出,则使用默认值,若给出,则把默认值覆盖
>>>def try(name,age=12):
... first,second=name,age
... print 'first=%s,second=%d' % (first,second)
>>>try(name='sam')
first=sam,second=12
>>>try(age=21,name='sam')
first=sam,second=21
当然推荐是使用关键字参数,否则如果使用位置参数,谁都不知道会给函数参数传入什么值。同时使用位置参数和关键字参数也行,这时就必须注意要把位置参数放在关键字参数前。
接下来就是非常有趣的语法了,在python中只要像下面这样定义函数时
>>>def try(*parameter):
... print parameter
>>>try(1,2,3)
(1,2,3)</span>
突然发现怎么可以传入多个参数了?就是因为参数前的星号可以将所有值打包为一个元组,然后作为一个参数传入进入函数,所以打印出来的就是一个元组形式。
>>>def try(*parameter):
... print parameter
>>>try(x=1,y=2,z=3)
Traceback <most recent calls last>:
File"<stdin>",line 1,in <moudle>
TypeError:try<> got an expected keyword argument'x'
不是可以传入多个值的吗,怎么又出错误了,其实仔细观察就会发现前面的例子都只是传入位置参数,那么传入关键字参数就不行了么?放心,这个问题早就给你解决好了。你只需要使用两个星号就OK了。
>>>def try(*parameter):
... print parameter
>>>try(x=1,y=2,z=3)
{'y'=2,'z'=3,'x'=1}
这下就行了,只是返回的不再是元组而是字典了。