Перейти к содержимому

Что делать если строка в питоне слишком длинная

  • автор:

Перенос длинного кода на новую строку 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 ��

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *