Python datetime.now()作为默认函数参数,在不同的时间返回相同的值

2024-05-23 15:08:28 发布

您现在位置:Python中文网/ 问答频道 /正文

现在我遇到了一些无法解释和解决的问题。
这是我的第一个python模块

TimeHelper.py

from datetime import datetime

def fun1(currentTime = datetime.now()):
    print(currentTime)

另一个是

Main.py

from TimeHelper import fun1
import time

fun1()
time.sleep(5)
fun1()

当我运行Main.py时,输出是
2020-06-1609:17:52.316714
2020-06-16 09:17:52.316714 我的问题是为什么结果中的时间是一样的?将datetime.now()传入默认参数时是否有任何限制


Tags: 模块frompyimportdatetimetimemaindef
3条回答

这是因为当您定义函数datetime.now()时,仅在该时间计算该值,并且该值存储在currentTime中,因此无论何时运行fun1currentTime值都不会更新。
您只需在TimeHelper.py中执行此操作即可

from datetime import datetime

def fun1(currentTime=None):
    if currentTime:
        print(currentTime)
    else:
        print(datetime.now())

希望有帮助:)

我想我找到了答案。 感谢@user2864740
所以我把TimeHelper.py改成这个

from datetime import datetime

def fun1(currentTime = None):
    if currentTime is None:
        currentTime = datetime.now()
    print(currentTime)

一切都符合我的期望

在函数中指定变量时,实际上在导入函数时只指定一次。要动态分配它,您需要在每次运行函数时在函数内部设置变量

from datetime import datetime

def fun1():
    currentTime = datetime.now()
    print(currentTime)

编辑:

如果你想明确说出时间,那么:

from datetime import datetime

def fun1(time):
    currentTime = time
    print(currentTime)

相关问题 更多 >