【问题标题】:how to directly import now() from datetime.datetime submodule如何从 datetime.datetime 子模块直接导入 now()
【发布时间】:2014-12-15 19:19:17
【问题描述】:

背景:我在一个 Python 程序中有几个被重复调用的紧密循环,其中包括 datetime.datetime.now() 方法,以及 datetime.datetime.mindatetime.datetime.max 属性。为了优化,我想将它们导入本地命名空间,避免重复的、不必要的模块层次结构名称查找,如下所示:

from datetime.datetime import now, min, max

但是,Python 抱怨:

Traceback (most recent call last):
  File "my_code.py", line 1, in <module>
    from datetime.datetime import now, min, max
ImportError: No module named datetime

问题:为什么上述子模块导入不起作用?

解决方法:我可以这样做:

import datetime
dt_now = datetime.datetime.now
dt_min = datetime.datetime.min
dt_max = datetime.datetime.max

但是,我很好奇为什么更传统的方法不起作用?为什么我不能直接从 datetime.dateime 子模块导入方法和属性? ...而且,是否有任何理由避免上述解决方法(除了可读性、超越自己等)?

谢谢!

【问题讨论】:

  • 你最好不要导入 max 和 min ,否则当你调用内置的 min 或 max 函数时可能会出现意想不到的结果
  • @PadraicCunningham,你是对的。这就是为什么我在解决方法中更改了名称,但我懒得在原始示例中添加“as”来重命名它们。 :)

标签: python datetime import git-submodules


【解决方案1】:

datetime.datetime 不是子模块。 datetimedatetime 模块中的一个类。 now 是该类的一个方法。您不能使用from...import... 导入类的各个方法。您只能使用它来导入包中的单个模块,或存在于模块顶层的单个对象。

至于你的解决方法,如果你想要速记,我觉得这样做更易读:

from datetime import datetime as dt
dt.now()
# you can also use dt.max, dt.min, etc.

如果您真的想将这些方法直接放在局部变量中,那么您的解决方法是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多