【问题标题】:Coding style (PEP8) - Module level "dunders"编码风格 (PEP8) - 模块级“dunders”
【发布时间】:2016-12-26 22:15:57
【问题描述】:

“Dunder”的定义(Double underscore):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__等应该 放置在模块文档字符串之后但在任何导入语句之前 除了 __future__ 进口。 Python 要求未来导入 必须出现在模块中除文档字符串之外的任何其他代码之前。

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

"""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:模块级导入不在文件顶部

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

【问题讨论】:

  • PEP 8 是一个动态文档。考虑到它之前可能对这个主题沉默
  • @MartijnPieters - 是否有机会查看添加/更改部分的时间?

标签: python pycharm pep8 pep


【解决方案1】:

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

放松__all__位置。

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

关闭 #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 样式检查器),那么我相信它会自动修复。否则,也许可以向他们提交错误以查看此问题。

【讨论】:

  • 哇,这么快又清晰。将在九分钟内接受这个答案(为什么这么长?):) 有人会注意到这个变化并在下次更新 PEP8 检查器的行为吗?
  • @linusg:这个问题是由 pycodestyle 项目提出的,所以我相信它会被更新。如果你想在那里修复它,请使用 PyCharm 提交一个错误。
  • 我会在接下来的几天里做更多的研究来了解 PEP8 检查是如何在 PyCharm 中完成的,并最终提交一个错误。然后我会编辑我的问题。
  • @AXO:那只是github.com/PyCQA/pycodestyle/issues/394的骗子
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多