"导入日期时间"之间的差异和"来自datetime import datetime",使用哪个日期时间

时间:2017-03-13 19:29:18

标签: python datetime

//作品和输出是2017-03-13 14:14:45.157593;  然后我可以深入到分钟等等。

from datetime import datetime
print(datetime.today())

//作品和输出是2017-03-13

import datetime
print(datetime.date.today())

//两者在一起它不起作用。 输出错误:AttributeError:module' datetime'没有属性'今天'

from datetime import datetime
import datetime
print(datetime.today())
print(datetime.date.today())
  1. 为什么有两个不同的模块?
  2. 为什么我不能一起使用它们?我不想一起使用它们但需要理解python解释器是如何工作的(因为它一次执行单个语句)...它是否看到第一个导入并在执行第一个导入时忽略第二个导入陈述或其他什么?
  3. 谢谢, 大卫

3 个答案:

答案 0 :(得分:5)

只有一个模块:datetime,其中包含一个类datetime

如果您执行import datetime,则datetime是模块,datetime.datetime是该类。

如果您执行from datetime import datetime,则datetime是该类,并且您没有该模块的名称。

如果同时执行这两项操作,则datetime是最后执行的一项,因为名称datetime由其他import语句重新分配。

这种混淆是为什么PEP 8为模块名称和类名建议不同的外壳(根据PEP 8,该类应该被命名为DateTime)但是在PEP 8之前datetime已经在标准库中了写入。

答案 1 :(得分:2)

1。)没有2个不同的模块。 import datetime正在导入datetime.py,它是包含datedatetime类的实际文件。如果这样做,则导入整个文件,而如果执行from datetime import datetime,则只导入该文件中的datetime类。

2。)正如@Apero所说,导入datetime(文件)实际上会覆盖你导入的类,这就是你得到错误的原因。在文件级别导入时,解释器基本上忽略了行from datetime import datetime

答案 2 :(得分:1)

这很简单

from foo import foo  # makes the foo namespace available
import foo  # also makes the foo namespace available, but overwrites the previous one

它与:

相同
foo = 1
foo = 3

def foo():
    ...

def foo():
    ...

Class Foo(...):
    ...

Class Foo(...):
    ...

Python从上到下读取,因此所有与写入或导入的名称相同的名称都会覆盖先前声明/导入的名称。