我有一个 Helper.py 看起来像这样:
def toDayDate():
return Now()
def getAge(dob,today=toDayDate()):
doMagic()
然后我在这里使用它:
from helper import getAge
input=getDOBfromUSER()
getAge(input)
问题是当导入被 python 解释时toDayDate()无论如何都会运行!!!
我在这里做错了什么?
上面的设置是将参数设置为默认动态
您可能想阅读以下资源:
当你这样声明时:
def getAge(dob,today=toDayDate()):
引用这些参考文献:
Python 的默认参数在定义函数时计算一次,而不是每次调用函数时
我们来证明一下:
>>> from datetime import datetime
>>>
>>>
>>> datetime.now() # Display the time before we define the function
datetime.datetime(2021, 9, 28, 17, 54, 16, 761492)
>>>
>>> def func(var=datetime.now()): # Set the time to now
... print(var)
...
>>> func()
2021-09-28 17:54:16.762774
>>> func()
2021-09-28 17:54:16.762774
>>> func()
2021-09-28 17:54:16.762774
如您所见,即使我们func()
在几分钟、几小时或几天后调用,它的值也将固定为我们定义它的时间,并且不会在每次调用时实际更改。这也证明一旦你定义了一个函数(或导入了一个包含该函数的文件),它的定义就已经被评估了,其中包括它的默认参数。在设置默认参数之前,它不会等待您先调用该函数。
你需要做的是:
def getAge(dob,today=None):
if today is None:
today = toDayDate()
doMagic()
或者你可以利用布尔短路:
def getAge(dob,today=None):
today = today or toDayDate()
doMagic()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句