когда оператор python является продолжением строки?

синтаксически недопустимо следующее:

if extremely_long_condition_that_takes_up_a_whole_line and
  another_condition:
    #do something

действует следующее:

if (extremely_long_condition and
  another_condition):
    #do something

почему они разные? В более общем плане, почему #2 в порядке, но #1 как-то опасен/неоднозначен? Я не вижу, как первое утверждение является или обобщается на двусмысленное утверждение.

5 ответов


скобки подразумевают продолжение линии, пока они не будут закрыты.

PEP-8 говорит об этом:

предпочтительным способом обертывания длинных строк является использование подразумеваемого Python продолжение линии внутри скобок, скобок и скобок. Длинная линия можно разбить на несколько строк, обернув выражения в скобки. Они должны использоваться вместо использования обратной косой черты для продолжения линии.

или это уже обсуждали более формально в справочник по языку:

две или более физические строки могут быть объединены в логические строки с помощью символы обратной косой черты (\)

выражения в круглых скобках, квадратных скобках или фигурных скобках могут быть разделены на несколько физических строк без использования обратной косой черты.


без фигурных скобок это определенно неоднозначно в присутствии унарных операторов.

рассмотрим строку:

a = 3 + 4
+1

здесь у вас есть простое сложение, за которым следует унарный положительный оператор.

вы можете утверждать, что линия с трейлинг-оператором не двусмысленна (и в настоящее время я не могу придумать встречный пример), поэтому я вернусь к части" особые случаи недостаточно особенные, чтобы нарушить правила " Дзен питон.


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

a = ("Hello "
     "World")

другой допустимый, потерять скобки (не рекомендуется PEP 8) :

if extremely_long_condition_that_takes_up_a_whole_line and \
  another_condition:
    #do something

С PEP 8 :

предпочтительным способом обертывания длинных строк является использование подразумеваемого продолжения строки Python внутри скобок, скобок и скобок. Длинные строки можно разбить на несколько строк, заключив выражения в круглые скобки. их следует использовать вместо использования обратной косой черты для продолжения строки. Убедитесь в том, что отступ продолженной линии соответствующим образом.

Я предлагаю вам прочитать PEP 8.


все круглые скобки поставляются со встроенным продолжением линии. Я не уверен насчет and в частности, но причина, по которой продолжения линии не поощряются (\ - style) является то, что конечные пробелы могут аннулировать команду, и их трудно увидеть. Пробелы внутри скобок, никогда не сломать его.


конечно, вы можете использовать функции, чтобы сделать его более понятным.

вместо:

if (extremely_long_condition_that_takes_up_a_whole_line and
  another_condition):
    #do something

вы могли бы сделать:

def cond():
    extremely_long_condition_that_takes_up_a_whole_line

def another_condition():
     # whatever

if cond() and another_condition():
     #do something 

или, если у вас есть куча условий:

if all(conditions(x) for x in seq):
     #do something

дизайн Python предназначен для поощрения длинных строк и блоков, которые должны быть разбиты на меньшие более читаемые биты. Вы сталкиваетесь с таким поощрением.

Я пытаюсь удерживать строки до 70 символов.

самые трудные для меня restring длину вложенных представлений. Я ломаю их так, что перерыв на самом деле помогает читаемости.