2019年10月6日
|
by YoungTimes
|
No comments
python中如何定义带有默认参数的函数
直观的,带有默认参数的python函数非常简单:
1) 在定义中为参数赋值;
2) 带默认值的参数出现在函数的最后;
3) 如果默认值是可变容器(如列表、集合、字典等);
如下代码所示:
def fun_with_default_param(a, b=0):
print(a, b)
fun_with_default_param(1) // a=1, b=0
fun_with_default_param(1, 2) // a=1, b=2
注意:
1、默认参数的绑定发生在函数定义的时候。
x = 0
def fun_with_default_param(a, b=x):
print(a, b)
fun_with_default_param(1) // a=1, b=0
x = 1
fun_with_default_param(1) // a=1, b=0
2、赋给默认参数的值应该为不可变对象。如None、True、False、数字、或者字符串常量等;
>>> def fun_with_default_param(a, b=[]): # Bad Param
...
return b
>>> x = fun_with_default_param(1)
>>> print(x)
[]
>>> x.append(1)
>>> x.append(2)
>>> print(x)
[1, 2]
>>> print(fun_with_default_param(1))
[1, 2]
可以看到默认值在函数体之外被修改,导致之后的函数调用对默认值产生持续的影响。
所以函数的参数的默认值的应该为不可变对象。
3、默认参数的None值的处理
def fun_with_default_param(a, b=None):
if not b:
....
上述的代码的问题在于,尽管None会被判为False;同时长度为0的字符串、列表、元组、字典都会被判定为False,从而给代码带来一些难以追踪的问题。
为了解决None被错误处理的问题,可以为函数的默认参数选择一个安全的默认值。
_no_value = object()
def fun_with_default_param(a, b = _no_value):
if b is _no_value:
print('no b value supplied')
上述代码,用object()提供了一个特有默认参数,这个实例在实际应用中作为传入参数几乎不可能,因此_no_value是一个比较安全的可选参数默认值。
发表评论在此浏览器中保存我的名字、电邮和网站。
Submit