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

时间:2016-08-19 17:01:55

标签: python pycharm pep8 pep

“Dunder”的定义( D ouble 得分下):http://www.urbandictionary.com/define.php?term=Dunder

根据Python代码中模块级“dunders”(如__all____version____author__等)的位置,我有一个问题。

在阅读PEP8并查看this Stack Overflow问题时,我想到了这个问题。

接受的答案是:

  

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

但是在PEP8部分Module level dunder names中我读到了以下内容:

  

模块级别“dunders”(即具有两个前导和两个尾随的名称   下划线),例如__all____author____version__等   放在模块docstring之后但在任何import语句之前   除了__future__进口。 Python要求未来进口   必须在除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

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

  

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

PyCharm ignoring PEP8?

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

1 个答案:

答案 0 :(得分:18)

PEP 8最近更新了以将位置放在导入之前。请参阅2016年6月7日提交的revision cf8e888b9555

  

放宽__all__位置。

     

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

     

关闭#27187。 Ian Lee的补丁。

文字为further updated the next day,以解决from __future__ import ...警告。

补丁链接到issue #27187,后者又引用this pycodestyle issue,发现PEP 8不清楚。

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