首页 > 解决方案 > 如何使用导入的方法在 python 中初始化默认值?

问题描述

我有一个看起来像这样的 Helper.py:

def toDayDate():
   return Now()    

def getAge(dob,today=toDayDate()):
  doMagic()

然后我在这里使用它:

from helper import getAge

input=getDOBfromUSER()
getAge(input)

问题是当 python 解释 Import 时,toDayDate() 无论如何都会运行!!!

我在这里做错了什么?

上面的设置是将参数设置为默认动态

标签: pythonmethodsinitialization

解决方案


您可能想阅读以下资源:

当你像这样声明它时:

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()

推荐阅读