如何在python中使用导入的方法初始化默认值?

最大限度

我有一个 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Python中使用列表中的键和空值初始化字典?

Java如何使用反射检查字段是否已初始化或为默认值?

无法在Kotlin中使用默认值@Value注释初始化属性

yaml已初始化值时,如何在Golang中测试默认值?

如何使用默认值初始化值类型?

如何在Kotlin中使用值初始化数组?

无法使用默认值初始化结构

使用默认值初始化哈希并加1

如何使用n个默认值初始化队列?

Angular:如何使用默认值初始化文本区域

如何为每列使用不同的默认值初始化NumPy数组?

使用默认值初始化HashMap吗?

使用大小和默认值初始化数组

使用大量参数和默认值初始化对象的Python方法

如何创建使用默认值初始化的结构?

如何使用const char初始化string_view的默认值

如何使用默认值动态初始化数组?

如何在sqlalchemy中使用默认值初始化数据库?

何时初始化默认值?

python function:使用默认值初始化的函数参数的范围

如何使用默认值初始化固定长度的std:pair的std :: vector?

如何在jQuery滑块中初始化默认值?

如何在Scala中使用默认值初始化通用数组

如何使用变量使用默认值初始化 MutableList?

使用默认值初始化 combineLatest

如何在 Python 中使用空值初始化对象?

使用初始化列表作为函数/方法参数的默认值

在 Angular 中使用 ngDefaultControl 时无法初始化默认值

Python defaultdict 在获取时返回 None,尽管已使用默认值进行初始化