导入__module__ Python: 下划线为什么?

4 投票
1 回答
1581 浏览
提问于 2025-04-17 17:11

我刚开始学习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,随便给一些对象起了这样的名字,因为他们觉得这样看起来更酷或者更重要。

撰写回答