编码风格(PEP8) - 模块级别"dunders"

lin*_*usg 18 python pep8 pep pycharm

"Dunder"(定义d ouble 得分):http://www.urbandictionary.com/define.php?term=Dunder


我有根据的模块级"dunders"(如放置的问题__all__,__version__,__author__在Python代码等).

这个问题向我走来,通过阅读而PEP8,看到这个堆栈溢出问题.

接受的答案是:

__author__ 是一个全局"变量",因此应该出现在导入之下.

但是在PEP8部分模块级别的dunder名称中我读了以下内容:

模块级"dunders"(即名称具有两个前缘和两个纵下划线),例如__all__,__author__,__version__等应被放置在模块文档字符串之后,但在除了从任何导入语句__future__进口.Python要求future-imports必须在除docstrings之外的任何其他代码之前出现在模块中.

作者还给出了一个代码示例:

"""This is the example module.

This module does stuff.
"""

from __future__ import barry_as_FLUFL

__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles'

import os
import sys
Run Code Online (Sandbox Code Playgroud)

但是当我将上述内容放入PyCharm时,我看到了这个警告(也见截图):

PEP8:模块级别导入不在文件顶部

PyCharm无视PEP8?

问题:使用双下划线存储这些变量的正确方法/位置是什么?

Mar*_*ers 19

PEP 8最近更新了,以便在进口之前放置位置.请参阅2016年6月7日提交的修订版cf8e888b9555:

放松的__all__位置.

将所有模块级别的dunder放在同一位置,并删除冗余版本的簿记信息.

结束#27187.Ian Lee的补丁.

该文本在第二天进一步更新,以解决from __future__ import ...警告.

补丁链接到问题#27187,后者又引用了这个pycodestyle问题,发现PEP 8不清楚.

在此更改之前,因为模块级dunder全局变量没有明确的指导原则,所以PyCharm和其他答案在当时是正确.我不确定PyCharm如何实施他们的PEP 8检查; 如果他们使用pycodestyle项目(事实上​​的Python样式检查器),那么我相信它会自动修复.否则,可能会向他们提交一个错误,看看它是否已修复.