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

Python datetime.now()作为默认函数参数,在不同的时间返回相同的值,python,python-3.x,python-datetime,Python,Python 3.x,Python Datetime,现在我遇到了一些无法解释和解决的问题。 这是我的第一个python模块 TimeHelper.py 另一个是 Main.py 当我运行Main.py时,输出是 2020-06-1609:17:52.316714 2020-06-16 09:17:52.316714 我的问题是为什么结果中的时间是一样的?将datetime.now()传入默认参数时是否有任何限制?在函数中指定变量时,实际上在导入函数时只指定一次。要动态分配它,您需要在每次运行函数时在函数内部设置变量 from datetime i

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

TimeHelper.py

另一个是

Main.py

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

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

from datetime import datetime

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

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

from datetime import datetime

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

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

从日期时间导入日期时间
def fun1(当前时间=无):
如果当前时间:
打印(当前时间)
其他:
打印(datetime.now())
希望有帮助:)我想我找到了答案。 感谢@user2864740
所以我把TimeHelper.py改成这个

from datetime import datetime

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

任何东西都能按我的期望工作。

默认参数只计算一次。重复的存在,通常是关于列表或类似的东西。of中所有感兴趣的信息(注意,变异是有效的,因为对一个新列表的评估只做了一次,而不是每次调用-这里的想法相同,除了向后)。这里关于“为什么”的任何答案都是答案(第一个链接)的副本,其中包括相关摘录和参考。一种标准方法是默认为
None
,如果参数为
None
(例如未指定),则指定一个值。Hi@user2864740感谢您的回复,但是现在,如果我想编写一个函数,它可以接受datetime类型的1或0 arg,如果age num为1,那么我可以返回输入datetime(如果为0),而不是返回当前时间(datetime.now())。我如何实现它?谢谢@user2864740此评论帮助我!这将不允许调用者指定不同的时间,这是默认参数的[唯一?]点。编辑需要一个参数,它否定了最初使用默认值的愿望。请参阅问题和主要评论(一些目标已被澄清)。@user2864740那么第一个aproach是完全可以接受的,您可以设置它,也可以不设置。他不想每次都有同样的时间。我给出了两个解决方案问题是什么?请看问题和主要评论。@user2864740我给出了,但我仍然不明白为什么要让它变得更复杂?只是一个建议,当比较对象标识时,使用
超过
==
或者如果currentTime
你可以简单地执行
,这也会很好,请看我的答案。@Sarthak thaks您的回答是“是”操作符对我有效,但“如果当前时间”不要担心我的错误,如果不是当前时间,那将是
,因为使用
是一种很好的做法。
from datetime import datetime

def fun1(time):
    currentTime = time
    print(currentTime)
from datetime import datetime

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