13,7K подписчиков

Давайте разберемся с нижним подчеркиванием (_) в Python

1K прочитали

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.

Символ нижнего подчеркивания

Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.

В большинстве языков программирования (хотя, конечно же не во всех) этот символ используется в названиях функций и переменных, но в Python он имеет особое значение. Если вы Python-программист, то вероятно знакомы с таким синтаксисом: for _ in range(10) , __init__(self).

Этот пост посвящен объяснению того, как использовать нижнее подчеркивание (_) и как его понимать в различных контекстах.

Известно пять случаев с использования нижнего подчеркивания в Python.

  • Для хранения значения последнего выражения в интерпретаторе.
  • Для игнорирования конкретного значения (так сказать «Мне без разницы»).
  • Для придания специального значения переменным и функциям при наименовании.
  • Для использования функций «Internationalization(i18n)» или «Localization(l10n)».
  • Для разделения цифр в числе или символов в литерале.

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

Случай использования в интерпретаторе

Интерпретатор Python’а хранит последнее значение в специальной переменной с именем «_». Эта особенность используется в первую очередь в стандартном интерпретаторе CPython, как, впрочем, и в других интерпретаторах Python.

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-2


Случай игнорирования значений

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

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-3


# Ignore the multiple values. It is called "Extended Unpacking" which is available

Случай придания специфических значений именам переменных и функций

Нижнее подчеркивание часто используется в наименованиях. Стиль кодирования PEP8 в языке Python вводит соглашения по использованию следующих случаев наименований.

_single_leading_underscore

Это соглашение используется для объявления приватных переменных, функций, методов и классов в модуле. При этом все, что связано с этим соглашением, игнорируется в from module import *.

Хотя, конечно же, Python не поддерживает истинной приватности, поэтому можно непосредственно вызывать их из других модулей. Поэтому иногда это называют «нестрогий указатель внутреннего использования«.

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-4


single_trailing_underscore_

Это соглашение предотвращает конфликты между ключевыми или стандартными словами.

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-5


__double_leading_underscore

В этом случае речь идет о синтаксисе, а не о соглашении. Двойное нижнее подчеркивание искажает имена атрибутов класса и исключает конфликты между именами атрибутов классов. (Так называемое «декорирование», означающее, что компилятор или интерпретатор изменяет имена переменных или функций по некоторым правилам). Правило декорирования в Python добавляется «_ИмяКласса» перед именами атрибутов, объявленных с двойным нижним подчеркиванием.

То есть, если написать метод с именем «__метод» в классе, имя будет декорировано следующим образом: «_ИмяКласса__метод».

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-6

Так как именованные атрибуты с двойным нижним подчеркиванием будут декорированы, так показано выше, мы не сможем получить к ним доступ по «ИмяКласса.__метод». Некоторые иногда пользуются этим как свойством подлинного сокрытия, на самом же деле это не служит для сокрытия и не рекомендуется для применения с подобными целями. Подробную информацию по этой теме можно найти в разделе по наименованиям в Python.

__double_leading_and_trailing_underscore__

Это соглашение используется для специальных переменных или методов (так называемый «магический метод») таких как __init__, __len__. Эти методы определяют особые синтаксические признаки или выполняют специфические действия. Например, __file__ указывает местоположение Python-файла, __eq__ выполняется, когда истинно условие a == b.

Конечно можно создать специальный пользовательский метод, однако чаще прибегают к модификации предопределенных методов. (Например, для инициализации с помощью __init__ класса, который будет использоваться при создании экземпляра класса.)

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-7

Случай использования функций Internationalization(i18n) или «Localization(l10n)

Это просто соглашение, без синтаксических функций. Нижнее подчеркивание не означает i18n/l10n, это только соглашение, связывающее i18n / l10n, с переменной нижнего подчеркивания, взятой из соглашения в языке программирования С.

Встроенная библиотека gettext, а также фреймворк Django также поддерживают и используют это соглашение.

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-8

Случай разделения чисел в числе или символов в литерале

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

  Символ нижнего подчеркивания   Символу нижнего подчеркивания (_) в Python присущ ряд особенностей.-9


Заключение

Итак, мы рассмотрели особенности и назначения применения нижнего подчеркивания в Python. И хотя я Python-программист, я сам не знал о некоторых его свойствах до написания этого поста. В частности, совершенно новым для меня оказалось использование функций i18n/l10n.

Надеюсь, что вы, как и я, нашли для себя много полезного при чтении моего поста. Спасибо!

Читайте нас в телеграмме, vk

Перевод статьи mingrammer: Understanding the underscore( _ ) of Python