我正在寻找像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)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           207 次  |  
        
|   最近记录:  |