1.导入对象不同
(1)from datetime import datetime:从 `datetime` 模块中只导入 `datetime` 这个类 。`datetime` 模块里有多个类,像 `date`、`time`、`datetime`、`timedelta` 等 ,这种导入方式只引入其中特定的 `datetime` 类,用于表示日期和时间。
(2)import datetime:导入整个 `datetime` 模块,模块里包含的所有类(如 `date`、`time`、`datetime`、`timedelta` 等 )、函数、变量等都被导入。
2.使用方式不同
(1)from datetime import datetime:导入后,可直接使用 `datetime` 类来创建对象、调用方法,无需模块名前缀。例如获取当前时间 `now = datetime.now()` 。
(2)import datetime:使用模块内的类、函数等时,需加上模块名前缀。例如获取当前时间要写成 `now = datetime.datetime.now()` 。
3.命名空间与潜在冲突
(1)from datetime import datetime:将 `datetime` 类直接导入到当前命名空间,若当前命名空间已有同名对象,会产生命名冲突 。比如已有变量 `datetime = 10` ,再用这种方式导入就会出问题。
(2)import datetime:整个模块作为一个对象在命名空间中,模块内成员通过 `datetime.<成员名>` 访问,一般不会与当前命名空间其他对象冲突。
4.代码可读性和简洁性
(1)from datetime import datetime:代码相对简洁,直接用类名,在只关注 `datetime` 类功能时,代码更清爽。但如果代码规模大,不看导入部分,较难判断 `datetime` 来源。
(2)import datetime:使用时模块名前缀明确了功能来源,可读性好,从代码能清楚知道操作来自 `datetime` 模块。不过多次使用时,代码会稍显冗长。
一般来说,如果仅使用 `datetime` 类功能, `from datetime import datetime` 更简洁;若需频繁使用 `datetime` 模块多个类或函数,或要避免命名冲突, `import datetime` 更合适。