为了账号安全,请及时绑定邮箱和手机立即绑定

Python:什么时候需要为模块名称添加前缀?

Python:什么时候需要为模块名称添加前缀?

梦里花落0921 2022-05-19 18:35:44
C++经过多年的编程,我确实对 Python 编程C很陌生,并且正在尝试对语法有所了解。在以下非常初学者的代码中:from datetime import datetimefrom datetime import dateprint( datetime.now() )# print( now() ) # NameError: name 'now' is not definedprint( date(2005, 2, 27) )# print( datetime.date(2005, 2, 27) ) # TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int'...为什么有必要在范围now()内datetime但显然不正确这样做date(...)?我引用的学习材料说这两个import statements意味着我“从日期时间标准模块导入日期和日期时间类。 ”可能从我的C++背景来看,我等同module于namespace并且会认为这意味着(1)你' d 需要使用它们来自的模块显式地定义函数和类的范围(如std::sort()),或者(2)不需要显式范围,因为该from/import子句类似于CC++'susing子句。所以上面的语法对我来说看起来很奇怪,因为看起来我正在使用来自日期时间“命名空间”的两个“事物”,并且我必须限定一个事物而不是另一个事物。FWIW,我vim用作我的编辑器 - 我想知道:使用启用图形/自动建议的编辑器会更透明吗?对于任何回答者,如果您能解释一下经验丰富的 Python 程序员如何找到此类问题的答案,我将不胜感激。我的意思是:在C/中,我C++会查找任何内容以找出是什么 - 你如何“查找”日期时间“模块”?.h#include
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

你是对的 - 你不需要范围!这是一个稍微令人困惑的情况,因为该datetime模块有一个类也称为datetime.

那么这些中发生了什么:

print(datetime.now()) # 调用类的now()类方法datetime并打印其输出
print(now()) # now() 未在命名空间中定义,因此出现错误
print(date(2005, 2, 27)) # 实例化date对象并打印其表示
print(datetime.date(2005, 2, 27)) # 这是试图调用类的date()方法datetime,但没有存在,因此错误。

对于最后一种情况,如果您刚刚完成import datetime,则整个datetime 模块都会被导入。在这种情况下,您可以date通过执行 datetime.date(2005, 2, 27) 来实例化一个类对象。

希望这有点道理!


查看完整回答
反对 回复 2022-05-19
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

python中的导入很简单。导入时

from datetime import datetime

那么你从 modul datetime 只导入类/函数 datetime。(在这种情况下是一个类)。您的解释器不知道“现在”的功能,但是当您对导入的内容进行循环时,您可以访问它。

datetime.now()

第二次导入后

from datetime import date

您的编译器知道类日期和日期时间。当你尝试

print( datetime.date(2005, 2, 27) )

那么这不是您所期望的。您尝试从类 datetime 调用具有其他参数的函数 date 作为模块 datetime 中的类日期。modul datetime 的问题在于它包含一个带有 datetime 的类,因此有点令人困惑。


查看完整回答
反对 回复 2022-05-19
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信