我想要一个函数作为可选参数 在python中使用另一个函数,但我不清楚如何做到这一点。你知道吗
例如,我定义了以下函数:
import os, time, datetime
def f(t=datetime.datetime.now()):
return t.timetuple()
我已经把t=datetime.datetime.now()
为了使参数是可选的,所以
能够在没有参数的情况下调用f()
。你知道吗
现在每当我执行f()
时,我得到相同的datetime A(根据我的预期,这是错误的),但是每当我执行f(datetime.datetime.now())
时,我得到不同的datetime(正如预期的那样正确)。你知道吗
例如
>>> f()
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=36, tm_sec=2, tm_wday=5, tm_yday=171, tm_isdst=-1)
>>> f()
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=36, tm_sec=2, tm_wday=5, tm_yday=171, tm_isdst=-1)
>>> f(datetime.datetime.now())
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=37, tm_sec=1, tm_wday=5, tm_yday=171, tm_isdst=-1)
>>> f()
time.struct_time(tm_year=2015, tm_mon=6, tm_mday=20, tm_hour=15, tm_min=36, tm_sec=2, tm_wday=5, tm_yday=171, tm_isdst=-1)
为什么第四个电话让我回到36分2秒 在那之前打电话的时候? 为什么前两个电话给出相同的准确时间,即使我让他们之间有足够的时间?你知道吗
正如flask所提到的,解析函数时会计算默认值,因此它将被设置为一次。你知道吗
对此的典型解决方案是不将默认值设为可变值。您可以执行以下操作:
顺便说一句,为了读者的利益,您应该尝试使用有意义的方法和变量名。你知道吗
在将函数加载到第二个函数中时,可以通过指定函数来防止对函数求值。你知道吗
编辑:函数总是在参数中求值。解决方案:将其赋值与参数解耦
在这里,可选参数是datetime now的函数,没有括号,正如@jonsharpe所建议的那样。调用f调用默认函数,调用两次返回两个不同的时间:
或者您可以传入另一个函数,这里是一个测试函数,并重写
t
。调用f()调用传入的函数:相关问题 更多 >
编程相关推荐