python - 如何使用导入的方法在 python 中初始化默认值?
问题描述
我有一个看起来像这样的 Helper.py:
def toDayDate():
return Now()
def getAge(dob,today=toDayDate()):
doMagic()
然后我在这里使用它:
from helper import getAge
input=getDOBfromUSER()
getAge(input)
问题是当 python 解释 Import 时,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()
推荐阅读
- python - 在 pandas 的 groupby 中滚动应用函数
- python - 如何将字典保存为 JSON 文件?
- r - save(list = ls()) 内部函数不适用于分配变量
- javascript - 将 Javascript 变量插入 JSON 对象
- arrays - 优化中的 Julia 抽象类型?
- javascript - 元素编辑按钮应该只编辑“那个”元素,而不是更新所有
- javascript - 复杂的 JavaScript 对象
- java - 将多个数据写入 Excel 文件
- c++ - eclipse中的c ++ pthread无法编译,在终端中可以
- mysql - 为什么空闲云 SQL 实例显示 10 qps 写入请求?