导入__module__ Python: 下划线为什么?
我刚开始学习Python,
并且开始接触别人写的代码。
在从Pypi下载的包的源代码中,我注意到有这样的用法:
import __module__
用来使用包的src
文件夹中定义的函数和类。
这种做法常见吗?我其实不太理解这种语法,
你能给我解释一下或者推荐一些参考资料吗?
1 个回答
6
这是Python的一种约定,主要用于一些内置对象。根据PEP8的说法:
__双下划线开头和结尾__
:这些是“魔法”对象或属性,它们存在于用户控制的命名空间中。比如说__init__
、__import__
或__file__
。千万不要自己随便创造这样的名字;只在文档中提到的情况下使用它们。
但最终这并不是一种“语法”,也就是说你不需要特别理解它,__module__
只是一个带下划线的名字。它和 module
是完全不同的,没什么关系。
这里有个例子可以让你明白它只是个名字:
>>> __foo__ = 42
>>> print foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
>>> print _foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '_foo' is not defined
>>> print __foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '__foo' is not defined
>>> print __foo__
42
>>> type(__foo__)
<type 'int'>
本身没有什么特别的地方。
不过,如果没有更多关于你看到这个的上下文信息,很难说作者的意图是什么。他们可能是在导入一些Python的内置功能(例如 from __future__ import...
),或者他们忽略了PEP8,随便给一些对象起了这样的名字,因为他们觉得这样看起来更酷或者更重要。