1. python中在函数的定义和调用方面非常灵活。定义函数时,可以对若干arg设置它的default value,这样在调用时,就只可以使用较少数量的arg (定义时未设的default value的).当然也可以在调用时,overwrite 原来arg的default value.
2. 调用函数,既可以使用keyword指定参数值,也可以不指出keyword (non-keyword),而直接给出arg的值。当然,为保证传参的正确性,需注意一些规则。特别地要注意,不能在使用keyword指定某个参数的值后,再使用non-keyword的方法直接给出某个参数的值,例如这种情况是错误的:
>>> def gh(user, pwd='123'): #define a function gh()
print "User name is",user,
print "and password is",pwd
>>> gh(user='hw','abc') #call gh(), and has a mistake
SyntaxError: non-keyword arg after keyword arg
3. 函数定义时,每个参数都必须对应于一个 keyword,通常这个 keyword在形参列表中给出。另外还可以通过在形参列表中引入形如**name的参数来包含keyword argument.
形如**name的形参接受一个dictionary,包含所有未出现在形参列表中的keyword arguments (eg. username1 = 'hw', username2 = 'zs', useranme3 = 'ls', ...)
4. 还可以使用形如*name的形参,它接受一个tupe(元组),包含所有没有出现在形参列表中的non-keywords.
5. 当*name 和 **name 联合使用时,*name 必须在 **name 之前出现
对于以上3,4,5三点,引用Python2_5 tutorial中的例子加以说明:
def cheeseshop(kind, *arguments, **keywords):
print "-- Do you have any", kind, '?'
print "-- I’m sorry, we’re all out of", kind
for arg in arguments: print arg
print '-' * 40
keys = keywords.keys()
keys.sort() # 将数组keys中的内容按字母表顺序排列
for kw in keys: print kw, ':', keywords[kw]
#It could be called like this:
cheeseshop('Limburger', "It's very runny, sir.",
"It's really very, VERY runny, sir.",
client='John Cleese',
shopkeeper='Michael Palin',
sketch='Cheese Shop Sketch')
[ result ]
-- Do you have any Limburger ?
-- I’m sorry, we’re all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
6. 使用*arg(引用一个参数list: [VALUE1, VALUE2, ...])或**arg(引用一个参数tupe: {"KEYWORD1": "VALUE1", "KEYWORD2": "VALUE2", ...})
EXAMPLE:
>>> def func(username, psw):
print "Username is:", username
print "Password is:", psw
>>> info=["hw", "123"]
>>> func(*info)
Username is: hw
Password is: 123
>>> log={"username": "hw", "psw": "123"}
>>> func(**log)
Username is: hw
Password is: 123
本文详细介绍了Python函数定义和调用的灵活性,包括默认参数值、关键字参数、位置参数及特殊形式参数(*args, **kwargs)的使用方法,并通过实例演示了如何在函数中正确处理这些参数。
901

被折叠的 条评论
为什么被折叠?



