Перенос длинного кода на новую строку Python
Если строка превышает 80 символов в длину — по PEP 8 её нужно разделить на несколько.
Пример
Пример слишком длинной строки
url = your_base_url + «/monitor-service/api/v1/components/744618a0-78c5-4e19-78f4-6d215bde64a5»
Чтобы сделать перенос строки — воспользуйтесь символом \
url = your_base_url + \ «/monitor-service/api/v1/components/744618a0-78c5-4e19-78f4-6d215bde64a5»
url = your_base_url + «/monitor-service/api/v1/components/» \ «744618a0-78c5-4e19-78f4-6d215bde64a5»
f-string
Если нужно перенести f-string , например:
print ( f’ \n\n POST to < your_url >response status code is < response.status_code >\n ‘ )
Новую строку тоже нужно начать с f
print ( f’ \n\n POST to < your_url >response status code is ‘ f’ < response.status_code >\n ‘ )
Перенос при присваивании
Если нужно перенести выражение вида a = b, где b это что-то длинное:
# Правильно: # Выравнивание по открывающей скобке. foo = long_function_name(var_one, var_two, var_three, var_four) # Второй вариант так называемый «Подвешенный» отступ. foo = long_function_name ( var_one, var_two, var_three, var_four ) # Если поставить запятую в конце — закрывающую скобку можно. # поместить под первым непустым символом. result = some_function_that_takes_arguments ( ‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘e’ , ‘f’ , ) # Либо в начало строки. result = some_function_that_takes_arguments ( ‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘e’ , ‘f’ , ) # Неправильно: # Запрещено перечислять аргументы в первой строке # если следующая не выровнена. foo = long_function_name(var_one, var_two, var_three, var_four)
Объявление функций
Если нужно объявить функцию с большим числом параметров:
# Правильно: # Нужно отступить на 4 пробела, чтобы выделить параметры. def long_function_name ( var_one, var_two, var_three, var_four): print (var_one) # Неправильно # Параметры не выделяются и читать неудобно def long_function_name ( var_one, var_two, var_three, var_four): print (var_one)
if
Ветвления на основе if разрешено оформлять следующими способами:
# Без отступа. if (this_is_one_thing and that_is_another_thing): do_something() # Хороший приём — добавить комментарий, который улучшит читаемость # в редакторах с подсветкой синтаксиса. if (this_is_one_thing and that_is_another_thing): # Since both conditions are true, we can frobnicate. do_something() # Разрешено добавить отступ перед and. if (this_is_one_thing and that_is_another_thing): do_something()
Объявление списков
Списки можно объявлять двумя способами:
my_list = [ 1 , 2 , 3 , 4 , 5 , 6 , ] my_list = [ 1 , 2 , 3 , 4 , 5 , 6 , ]

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых
Как перенести строку по правилам PEP8?
Проверял с помощью flake8 — ошибок не показывает.
Почему for так нужно форматировать — потому что здесь он часть конструкции (generator expression):
((row[index], row[-index - 1],) for index, row in enumerate(field))
И если переносить for на следующую строку, то он должен быть на 1 пробел правее самой левой скобки этой конструкции (не самой левой скобки предыдущей строки), таким образом как бы оставаясь внутри этой скобки (это создатели pep8 подразумевают под visual indent):
((row[index], row[-index - 1],) for index, row in enumerate(field))
Лайфхак: можно было вставить эту строку в PyCharm, добавить переносы строк, все отступы PyCharm сам бы правильно сделал (не всегда работает на 100% правильно, но с переносом generator expression и более простых конструкций работает).
Вообще, кроме pep8 существует Дзен Python и здравый смысл в конце концов, и лучше бы это нечитаемое нагромождение кода расписать на несколько отдельных строк без всяких извращений.
Разбиение длинной строки на несколько строк в Python
В процессе написания кода на Python часто возникает необходимость разбить длинную строку на несколько строк для улучшения читаемости кода. Вот типичный пример:
long_string = "Это очень очень длинная строка, которую нам нужно разбить на несколько строк для улучшения читаемости кода."
В Python существует несколько способов решения данной задачи.
Использование обратного слэша ()
Первый способ — использование символа обратного слэша в конце строки:
long_string = "Это очень очень длинная строка, которую " \ "нам нужно разбить на несколько строк " \ "для улучшения читаемости кода."
Обратный слэш позволяет Python понять, что строка продолжается на следующей строке.
Использование скобок
Второй способ — использование скобок:
long_string = ("Это очень очень длинная строка, которую " "нам нужно разбить на несколько строк " "для улучшения читаемости кода.")
Если строка заключена в скобки, Python автоматически объединяет все строки в одну.
Использование тройных кавычек
Третий способ — использование тройных кавычек:
long_string = """Это очень очень длинная строка, которую нам нужно разбить на несколько строк для улучшения читаемости кода."""
В этом случае Python сохраняет все пробелы и переносы строк, что позволяет форматировать строку как угодно.
Заключение
Все вышеописанные способы позволяют разбить длинную строку на несколько строк в Python. Выбор конкретного способа зависит от конкретной ситуации и личных предпочтений.
Перенос строк кода Python
Подписывайтесь на мой канал в Телеграм @pyway , чтобы быть в курсе о новых статьях!
PEP-8 не рекомендует писать строки кода длиннее, чем 79 символов. С этим можно не согласиться, однако, встречаются строки, которые не влезают даже на наши широкоформатные мониторы.
Старайтесь не делать очень длинные строки, разбивая сложные условия или формулы на отдельные части, вынося их в переменные или функции с осмысленными названиями.
Если есть острая необходимость иметь длинное выражение, тогда приходится переносить код на следующие строки. Можно делать двумя способами: скобками и слэшем.
Если, перед выражением открыта скобка (круглая, квадратная или фигурная в зависимости от контекста), но она не закрыта в этой строке, то Python будет сканировать последующие строки, пока не найдет соответствующую закрывающую скобку (англ. implicit line joining). Примеры:
# вычисления income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest) if (student_loan_interest > ira_deduction and qualified_dividends == 0): . # словари d = < "hello": 10, "world": 20, "abc": "foo" ># аргументы функции some_func(arg1, arg2, more_arg, so_on_and_on)
Обратите внимание, что в первом примере скобки очень важны. Без скобок код не скомпилируется из-за отступов, а если их убрать, то результат будет неверен: income станет gross_wages, а последующие строки не будут иметь эффекта!
# неправильно! income = gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest
Метод переноса обратным слэшем. Ставим обратный слэш конце строки и сразу энтер (перенос строки): тогда следующая строка будет включена в текущую (англ. explicit line joining), не взирая на отступы, как будто бы они написаны в одну строку:
income = gross_wages \ + taxable_interest \ + (dividends - qualified_dividends) \ - ira_deduction \ - student_loan_interest
Еще примеры со слэшем:
if student_loan_interest > ira_deduction \ and qualified_dividends == 0: . # допустимо, согласно PEP-8 with open('/path/to/some/file/you/want/to/read') as file_1, \ open('/path/to/some/file/being/written', 'w') as file_2: file_2.write(file_1.read()) # пробелы в строку попадут, а энтер - нет! str = "Фу\ < вот эти пробелы тоже в строке"
Почему скобки лучше для переноса:
- Лучше восприятие
- Скобок две, а слэшей надо по одному на каждый перенос
- Можно забыть слэш и сломать код
- Можно поставить пробел после слэша и тоже сломать
Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway