1.函数的形参默认值
1)python通过def关键字定义函数时,括号中的形参可以设置默认值,这样可以减少调用函数时传入的参数个数,如:
>>> def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
... while True:
... ok = raw_input(prompt)
... if ok in ('y', 'ye', 'yes'): return True
... if ok in ('n', 'no', 'nop', 'nope'): return False
... retries = retries - 1
... if retries < 0: raise IOError, 'refusenik user'
... print complaint
...
>>>
>>> ask_ok("Do you have a meeting?")
Do you have a meeting?y
True
>>> ask_ok("Do you have a meeting?",2)
Do you have a meeting?y
True
2)形参的默认值在函数的定义段就被解析,如下图:
>>> i=5
>>> def f(arg=i):
... print arg
...
>>> i=6
>>> f()
5
3)默认值只会被解析一次,当默认值是可变对象,如链表、字段或者大部分类实例时,会产生一些差异。如下面的实例在函数的调用过程会累积他们的参数值:
>>> def f(a,L=[]):
... L.append(a)
... return L
...
>>> print f(1)
[1]
>>> print f(1)
[1, 1]
>>> print f(1)
[1, 1, 1]
如果你不想在不同的函数调用之间共享参数默认值,可以如下面的实例一样编写函数:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L