Python 使用默认参数调用的函数不同于没有参数
Python Function Called with Default Argument Different From No Argument
假设我有一个带有两个参数的函数,x
和 y
。如果未给出 y
,那么我将创建一个基于 x
的默认值。当然,我不能用 def myfunc(x, y=x+1)
定义函数,因为默认值会在函数的 definition 处求值,而不是在调用时求值。相反,因此,我会用 def myfunc(x, y=None)
定义函数,并在我的函数体中检查 y
是否为 None
,如果是,则将 y
重新定义为 x + 1
.如果 y
可能是 任何东西 会怎么样?如果 None
也是一个可能的值呢?有没有一种方法可以区分 myfunc(4)
和 myfunc(4, None)
,即使 y
的默认值是 None
?
如果你真的需要知道它没有设置,这是方法:
NOT_SET = object()
def f(x, y=NOT_SET):
if y is NOT_SET:
# y is not set
之所以有效,是因为:
>>> a = object()
>>> b = object()
>>> a is b
False
假设我有一个带有两个参数的函数,x
和 y
。如果未给出 y
,那么我将创建一个基于 x
的默认值。当然,我不能用 def myfunc(x, y=x+1)
定义函数,因为默认值会在函数的 definition 处求值,而不是在调用时求值。相反,因此,我会用 def myfunc(x, y=None)
定义函数,并在我的函数体中检查 y
是否为 None
,如果是,则将 y
重新定义为 x + 1
.如果 y
可能是 任何东西 会怎么样?如果 None
也是一个可能的值呢?有没有一种方法可以区分 myfunc(4)
和 myfunc(4, None)
,即使 y
的默认值是 None
?
如果你真的需要知道它没有设置,这是方法:
NOT_SET = object()
def f(x, y=NOT_SET):
if y is NOT_SET:
# y is not set
之所以有效,是因为:
>>> a = object()
>>> b = object()
>>> a is b
False