“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:模块级别导入不在文件顶部
问题:使用双下划线存储这些变量的正确方法是什么?
答案 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样式检查器),那么我相信它会自动修复。否则,可能会向他们提交一个错误,以便将其修复。