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

C++经过多年的编程,我确实对 Python 编程C很陌生,并且正在尝试对语法有所了解。


在以下非常初学者的代码中:


from datetime import datetime

from datetime import date


print( datetime.now() )

# print( now() ) # NameError: name 'now' is not defined


print( 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


梦里花落0921
浏览 164回答 2
2回答

汪汪一只猫

你是对的 - 你不需要范围!这是一个稍微令人困惑的情况,因为该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) 来实例化一个类对象。希望这有点道理!

Cats萌萌

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 的类,因此有点令人困惑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python