Требует ли PEP 8 пробелов вокруг операторов в аргументах функции?

у меня есть этот код:

some_list = range(a, b+1)

после проверки моего стиля кодирования с плагин pep8 для vim, я получил это предупреждение:

missing whitespace around operator

кажется, что для соответствия с PEP 8 я должен вместо этого написать это?

some_list = range(a, b + 1)

но я читал руководство по стилю PEP 8 для кода Python несколько раз и просто не могу найти правило в случае выше предупреждение.

поэтому я хочу знать: при использовании стиля PEP-8 необходимы пробелы вокруг операторов (+, -,*,/и т. д.) в аргументах функции?

2 ответов


http://www.python.org/dev/peps/pep-0008/#other-recommendations

всегда окружайте эти двоичные операторы одним пространством с обеих сторон: назначение ( = ), дополненное назначение ( + = , - = и т. д.), сравнения (==, , !=, , =, in, not in, is, is not), логические значения (and, or, not).

исключение из этого, когда = используется для задания именованных параметров.

Edit:

Я посмотрел исходный код стандартной библиотеки Python и нашел вхождение сценария, представленного выше:

http://hg.python.org/cpython/file/9ddc63c039ba/Lib/json/decoder.py#l203

            end = _w(s, end + 1).end()

ваш плагин Vim был неправильным, когда вы спросили в 2013 году... но в 2010 году, когда он был создан. PEP 8 имеет менялось несколько раз, и ответ на ваш вопрос изменился.

первоначально PEP 8 содержал фразу:

используйте пробелы вокруг арифметических операторов

под это правила

range(a, b+1)

однозначно неправильно и должно быть написано как

range(a, b + 1)

это правило, что pycodestyle (Линтер Python, ранее известный как pep8.py, что спрашивающий плагин Vim использует под капотом) реализуется в течение нескольких лет.

, это был изменен в апреле 2012 года. Прямолинейный язык, не оставлявший места для благоразумия, был заменен более грубым советом:--27-->

если используются операторы с различными приоритетами, попробуйте добавить пробелы вокруг операторов с самым низким приоритетом(Ях). Используйте свое собственное суждение; однако никогда не используйте более одного пробела и всегда имейте одинаковое количество пробелов с обеих сторон двоичного оператора.

в конце концов исправлено, но не очень хорошо, и примеры остаются запутанными, по-видимому, подразумевают гораздо более строгое и менее субъективное правило, чем проза.

по-прежнему существует правило, требующее пробелов вокруг отдельных операторов:

всегда окружайте эти бинарные операторы одним пробелом с каждой стороны: назначение ( = ), дополненной назначением ( += , -= etc.), сравнения ( == , < , > , != , <> , <= , >= , in , not in , is , is not ), Логические значения (and , or , not ).

но обратите внимание, что это правило явно о том, к каким операторам оно относится, и арифметические операторы, такие как + are не в списке.

таким образом, ОПТОСОЗ, в его нынешнем виде,не диктуйте, следует ли использовать пробелы вокруг + оператор (или другие арифметические операторы, такие как * и / и **). Вы свободны "использовать свой собственный суд".

кстати, пикодистайл Линтер изменил свое поведение в конце 2012 года, чтобы отразить изменения в Пеп, разделяя правила об использовании пробелов вокруг операторов на два кода ошибок, E225 (для отказа использовать пробелы вокруг операторов, которые PEP 8 все еще требует пробелы вокруг), который включен по умолчанию, и E226 (для отказа использовать пробелы вокруг арифметических операторов), который игнорируется по умолчанию. Этот вопрос asker здесь, должно быть, использовал немного устаревшую версию линтера, когда он задал этот вопрос в 2013 году, учитывая ошибку, которую он видел.