2016-08-19 2 views
14

Определение "Dunder" (D ouble под счет): http://www.urbandictionary.com/define.php?term=Dunderкодирования стиль (PEP8) - на уровне модуля "dunders"


У меня есть вопрос по размещению уровне модуля «dunders» (например, __all__, __version__, __author__ и т. д.) в коде Python.

Вопрос подошел ко мне при чтении через PEP8 и посмотрел this Вопрос переполнения стека.

Принятый ответ говорит:

__author__ является глобальным «переменным» и, следовательно, должен появиться ниже импорта.

Но в разделе PEP8 Module level dunder names я прочитал следующее:

уровня модуля "dunders" (то есть имена с двумя ведущими и два задней подчёркивания), такие как __all__, __author__, __version__ и т.д. должен быть размещен после модуля docstring, но до любых заявлений на импорт за исключением __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?

Вопрос: Каков правильный путь/место для хранения этих переменных с двойными подчеркиваниями?

+2

PEP 8 - это живой документ. Учтите, что раньше это могло быть * тихим *. –

+0

@MartijnPieters - Любой шанс увидеть, когда раздел был добавлен/изменен? – linusg

ответ

16

PEP 8 недавно был обновлен, чтобы поставить место перед импортом. См revision cf8e888b9555, совершенный 7 июня 2016 года:

Relax __all__ местоположения.

Поместите все глушители уровня модуля в одном месте и удалите информацию о резервной версии избыточной версии.

Закрывает # 27187. Патч от Ян Ли.

Текст был further updated the next day, чтобы обратиться к предостережению from __future__ import ....

Патч-ссылки на issue #27187, которые, в свою очередь, ссылаются на this pycodestyle issue, где было обнаружено, что PEP 8 неясно.

Перед этим изменением, так как не было четкого указания на глобальные глобальные глобулы на уровне модуля, поэтому PyCharm и другой ответ были правильными в то время. Я не уверен, как PyCharm реализует свои проверки PEP 8; если они используют pycodestyle project (defacto Python style checker), то я уверен, что он будет исправлен автоматически. В противном случае, возможно, зарегистрируйте ошибку с ними, чтобы увидеть это исправлено.

+0

Ничего себе, так быстро и ясно. Примите этот ответ в девяти (почему так долго?) Минут :) Кто-нибудь заметит это изменение и обновит поведение проверки PEP8 в следующий раз? – linusg

+0

@linusg: проблема была поднята проектом pycodestyle, поэтому я уверен, что это будет обновлено. Создайте ошибку с PyCharm, если хотите, чтобы она была исправлена. –

+0

В ближайшие дни я сделаю еще несколько исследований, чтобы узнать, как проверки PEP8 выполняются в PyCharm и, в конечном итоге, приводят к ошибке. Тогда я отредактирую свой вопрос. – linusg

Смежные вопросы