【问题标题】:Import __module__ python: why the underscores?导入__module__ python:为什么下划线?
【发布时间】:2013-02-12 00:06:55
【问题描述】:

我是 Python 新手, 并已开始研究其他人编写的代码。

在从 Pypi 下载的包的源代码中我注意到了使用

import __module__

使用包的src 文件夹中定义的函数和类。

这是常见的做法吗?我实际上无法真正理解这种语法, 你能给我解释一下或者给我一些参考吗?

【问题讨论】:

  • 包里真的有一个叫__module__.py的文件吗?

标签: python import module double-underscore


【解决方案1】:

这是一些内置对象的 python 约定。 From PEP8:

__double_leading_and_trailing_underscore__:存在于用户控制的命名空间中的“魔法”对象或属性。例如。 __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,只是以这种风格命名了一些对象,因为他们认为它看起来很酷或更重要。

【讨论】:

  • ..我仍然不明白为什么我应该使用 import __module__ 来包含来自 src 文件夹的代码...
  • 如果你将你的模块命名为__helloWorld__,那么它也必须被导入。不过,如果不遵守半官方风格指南 PEP8,这将是一种不好的做法。
猜你喜欢
  • 2018-04-18
  • 1970-01-01
  • 2014-09-28
  • 2020-06-25
  • 2014-02-08
  • 2022-01-24
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多