python第二章-2.7 更多关于方法定义
2.7.1 默认参数值
最有用的形式就是给一个或多个变量制定默认值。这种方法可以创建一个允许调用时比定义
时需要更少的参数。例如:
def ask_ok(prompt, retries=4, complaint=’Yes or no, please!’):
while True:
ok = 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 really want to quit?’)
给一个变量: ask_ok(’OK to overwrite the file?’, 2)
设置所有的变量:
ask_ok(’OK to overwrite the file?’, 2, ’Come on, only yes or no!’)
这个实例也介绍关键in 的用法。其功能在于测试输入字符串是否还有特定的值。默认值也
可以在方法定义时候就被限制范围。例如:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
将会输出5
重要提醒: 默认值仅被设置一次,这与以前默认值为可变对象(如列表、字典和多数类实
例时)有很大的区别。例如, 接下来的方法累计被传入的参数变量到下次调用:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
将会输出
[1]
[1, 2]
[1, 2, 3]
如果你不想默认值在两个调用时分享。你可以写如下方法代替上面。
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L