lambda或其他方法可以用作python中的默认参数吗

Pet*_*ore 1 python lambda

我想使用一个默认参数,该默认参数在您调用该函数时进行了初始化,因此每次调用它时,它都是一个不同的默认参数。为了说明我要问的内容,如果没有提供第二时间,则您需要一个默认为当前时间的时间差函数:

通常你会做这样的事情。

def tdiff(target_time, curr_time=None):
   if curr_time == None:
      curr_time = datetime.datetime.now()
   return  curr_time - target_time
Run Code Online (Sandbox Code Playgroud)

但是摆脱if语句会更好。可以用lambda完成吗?(这样的事情)

def tdiff(target_time,  curr_time= lambda : datetime.now() ): 
    return curr_time - target_time
Run Code Online (Sandbox Code Playgroud)

编辑:我知道lambda将不起作用。还有其他方法可行吗?

dus*_*uff 5

可以用lambda完成吗?

不。您在语法上是有效的,但是curr_timeend 的默认值最终是lambda函数,而不是datetime被调用时将返回的值。可以解决以下问题:

if callable(curr_time):
    curr_time = curr_time()
Run Code Online (Sandbox Code Playgroud)

但是到那时,您最好还是使用if curr_time is None:问题中包含的方法。

(请注意,比较应为is None,不是== None。)