- Перенос строк кода Python
- Перенос длинного кода на новую строку Python
- Пример
- f-string
- Перенос при присваивании
- Объявление функций
- if
- Объявление списков
- Слишком длинная строка
- Решение
- Запись длинных строк текста на нескольких строках в 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 👈
Перенос длинного кода на новую строку 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 , ]
Слишком длинная строка
Дано целое число N и N строк. Выведите все строки, которые имеют такую же длину, что и самая длинная строка
Дано целое число N и N строк. Выведите все строки, которые имеют такую же длину, что и самая.
Слишком длинная строка
Появляется ошибка: слишком длинная строка, как это исправить, как перенести строку, если можно.
Слишком длинная строка параметра
Нужно отправить сообщение из powershell с вложением и ssl отправка идет с помощью winexec .
Слишком длинная строка в коде
if (ipart.eq.1.and.numed.eq.1.and.destep.eq.0.and.numed.eq.3.and.destep.gt.0) then write(*,*).
Сообщение было отмечено hate_PEP8 как решение
Решение
def foo(x): return str(x)[-1] != '9' and x % 2 != 0 data = map(lambda x: int(x)**2, input().split()) print(*filter(foo, data))
Запись длинных строк текста на нескольких строках в Python
Если вы используете PEP8-совместимую программу проверки кода, такую как flake8 в Python, вы получите следующую ошибку, если строка превышает 80 символов. E501 line too long Я покажу вам, как разбить длинную строку из более чем 80 символов, такую как URL, на несколько строк кода.
- Игнорировать переносы строк с обратными слешами (\)
- Разрывы строк могут быть свободно заключены в круглые скобки
Модуль textwrap также полезен, если вы хотите выводить и отображать длинные строки, оборачивая или опуская их.
Если у вас есть цепочка методов, длина которой превышает одну строку символов, а не длинная строка, вы можете разорвать строку и в коде.
Игнорировать переносы строк с обратными слешами (\)
В Python обратный слеш (\) является символом продолжения, и когда он помещается в конец строки, он игнорирует последующие переносы строк и считает, что строка продолжается.
Кроме того, когда несколько строковых литералов записываются последовательно, они объединяются в одну строку, как показано ниже.
s = 'aaa' 'bbb' print(s) # aaabbb
Комбинируя эти два способа, длинную строку можно записать в несколько строк кода, как показано ниже.
s = 'https://wikipedia.org/wiki/'\ '%E3%83%97%E3%83%AD%E3%82%B0%E3%83'\ '%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E' print(s) # https://wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E
Обратите внимание, что конкатенировать можно только строковые литералы (заключенные в ' или «»), а переменные, содержащие строки, приведут к ошибке.
s_var = 'xxx' # s = 'aaa' s_var 'bbb' # SyntaxError: invalid syntax
Для конкатенации переменных друг с другом или переменных со строковыми литералами используйте оператор +.
s = 'aaa' + s_var + 'bbb' print(s) # aaaxxxbbb
Даже если они разделены обратной косой чертой (\), для объединения переменных требуется оператор +.
s = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'\ + s_var\ + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' print(s) # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Разрывы строк могут быть свободно заключены в круглые скобки
В Python можно свободно разрывать строки внутри следующих за ними круглых скобок. Это правило можно использовать для заключения длинных строк текста в круглые скобки.
Обратите внимание, что следующие скобки имеют значение.
Поэтому при записи длинной строки на нескольких строках используйте круглые скобки ().
Опять же, используя тот факт, что несколько строк могут быть объединены в одну строку, мы можем написать следующее.
s = ('https://wikipedia.org/wiki/' '%E3%83%97%E3%83%AD%E3%82%B0%E3%83' '%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E') print(s) # https://wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E
Как и в примере с обратной косой чертой, оператор + необходим при включении переменных.
s = ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + s_var + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb') print(s) # aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxxxbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb