我正在寻找像Lisp的arg-supplied-p变量一样的东西,以帮助区分默认值和用户指定的相同值.
例:
def foo(a=10):
pass
Run Code Online (Sandbox Code Playgroud)
我想在foo中知道它是否像这样调用:
foo()
Run Code Online (Sandbox Code Playgroud)
或者像这样:
foo(10)
Run Code Online (Sandbox Code Playgroud)
或者甚至喜欢这样:
foo(a=10)
Run Code Online (Sandbox Code Playgroud)
最后2个对我来说是同义词; 我不需要知道那个细节.我已经仔细查看了检查模块,但getargspec为所有3个调用返回的结果完全相同.
Sve*_*ach 11
除了检查源代码,有没有办法告诉三个函数调用分开-它们意味着有完全相同的含义.如果您需要区分它们,请使用不同的默认值,例如None.
def foo(a=None):
if a is None:
a = 10
# no value for a provided
Run Code Online (Sandbox Code Playgroud)
正如Sven所指出的,通常使用None作为默认参数.如果您甚至需要区分无参数和明确的None之间的区别,则可以使用sentinel对象:
sentinel = object()
def foo(a=sentinel):
if a is sentinel:
# No argument was provided
...
Run Code Online (Sandbox Code Playgroud)