后台:我在Python程序中有一些重复调用的紧密循环,其中包括datetime.datetime.now()
方法,以及datetime.datetime.min
和{{1属性。为了优化,我想将它们导入本地命名空间,避免重复的,不必要的模块层次结构名称查找,如下所示:
datetime.datetime.max
然而,Python抱怨:
from datetime.datetime import now, min, max
问题:为什么以上子模块导入无效?
解决方法:我可以这样做:
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
但是,我很好奇为什么更传统的方法不起作用?为什么我不能直接从datetime.dateime子模块导入方法和属性? ......还有什么理由可以避免上述解决方法(除了可读性,超越自己等等)?
谢谢!
答案 0 :(得分:12)
datetime.datetime
不是子模块。 datetime
是datetime
模块中的一个类。 now
是该类的方法。您无法使用from...import...
导入类的各个方法。您只能使用它从包中导入单个模块,或者在模块的顶层存在单个对象。
至于你的解决方法,如果你想要速记,我觉得这样做更具可读性:
from datetime import datetime as dt
dt.now()
# you can also use dt.max, dt.min, etc.
如果你真的想将这些方法直接放在局部变量中,那么你的解决方法是有道理的。