Автостопом по Python | страница 44



Лучшее решение — заключить элементы в круглые скобки. Если интерпретатор Python встретит незакрытую круглую скобку в одной строке, он будет присоединять к ней следующие строки до тех пор, пока скобка не будет закрыта. То же поведение верно для фигурных и квадратных скобок.


Плохой кодХороший код
>french_insult = \>french_insult = (
>"Your mother was a hamster, and \>····"Your mother was a hamster, and "
>your father smelt of elderberries!">····"your father smelt of elderberries!"
 >)
>from some.deep.module.in.a.module \>from some.deep.module.in.a.module import (
>····import a_nice_function, \>····a_nice_function,
>········another_nice_function, \>····another_nice_function,
>········yet_another_nice_function>····yet_another_nice_function
 >)

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

Идиомы

Несмотря на то что обычно существует всего один очевидный способ решить задачу, код Python, написанный с помощью идиом (питонский код), может поначалу казаться неочевидным для новичков (если только они не голландцы[39]). Поэтому вам необходимо освоить хорошие идиомы.

Распаковка

Если вы знаете длину списка или кортежа, можете присвоить имена их элементам с помощью распаковки. Поскольку вы можете указать количество разбиений строки для функций split() и rsplit(), правую сторону выражения присваивания можно разбить только один раз (например, на имя файла и расширение), а левая сторона может содержать оба места назначения одновременно, в правильном порядке. Например, так:

>>>> filename, ext = "my_photo.orig.png".rsplit(".", 1)

>>>> print(filename, "is a", ext, "file.")

>my_photo.orig is a png file.

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

>a, b = b, a

Вложенная распаковка также работает:

>a, (b, c) = 1, (2, 3)

В Python 3 в PEP 3132 (https://www.python.org/dev/peps/pep-3132/) был представлен новый метод расширенной распаковки:

>a, *rest = [1, 2, 3]

># a = 1, rest = [2, 3]


>a, *middle, c = [1, 2, 3, 4]

># a = 1, middle = [2, 3], c = 4

Игнорирование значения

Если вам необходимо присвоить какое-то значение во время распаковки, но сама переменная не нужна, воспользуйтесь двойным подчеркиванием (__):

>filename = 'foobar.txt'

>basename, __, ext = filename.rpartition('.')


Многие руководства по стилю для Python рекомендуют использовать одинарное подчеркивание (_) для подобных переменных вместо двойного (__), о котором говорится здесь. Проблема в том, что одинарное подчеркивание зачастую применяется как псевдоним для функции gettext.gettext() и как интерактивное приглашение сохранить значение последней операции. Двойное подчеркивание выглядит точно так же прозрачно и почти так же удобно, снижает риск случайного переписывания переменной с именем «_» в обоих сценариях.