Значение символа подчеркивания в Python
Список вопросов к Python собеседованию
Подчеркивание в именах объектов
Наиболее простой и очевидный способ применения подчеркивания - это разделение слов в именах объектов:
- lower_case_with_underscores
- UPPER_CASE_WITH_UNDERSCORES
- Capitalized_Words_With_Underscores (ugly!)1
Одинарные и двойные подчеркивания в именах переменных и методов имеют определенное значение. Часть вариантов использования - это просто договоренность и предназначены как подсказка программисту, а часть используется интерпретатором Python:2
- _single_leading_underscore: слабый показатель того, что объект (переменная, функция, метод, класс) предназначен для «внутреннего использования» -
protected
на словах. (Например,from M import *
не импортирует объекты, имена которых начинаются с подчеркивания); - single_trailing_underscore_: используется по соглашению, чтобы избежать конфликтов с ключевыми словами Python;
- __double_leading_underscore: такие имена трансформируются в формат «имя класса + имя метода/атрибута». Это позволяет создавать уникальные методы и атрибуты классов (внутри класса FooBar __boo становится _FooBar__boo). Это также называется “Name Mangling” - интерпретатор меняет имя переменной таким образом, что затрудняет создание коллизий при расширении класса позже.;
- __double_leading_and_trailing_underscore__: «магические» методы или атрибуты, которые живут в контролируемых пользователем пространствах имен. Например.
__init__
,__import__
или__file__
. PEP 8 рекомендует никогда не придумывать таких имен, а использовать их только в соответствии с документацией.1
Символ подчеркивания в интерпретаторе
В интерпретаторе символ подчеркивания _
хранит результат последнего неошибочного действия, выведенного на экран, если он не был явно использован в качестве переменной.
Это связано с тем, что sys.stdout
экранируется с помощью displayhook
. Пример из официальной документации:
|
|
Подчеркивание для игнорирования значений
Нижнее подчеркивание _
также используется для игнорирования ненужных нам значений.3
- Игнорирование значения при распаковке
|
|
- Игнорирование нескольких значений - “Extended Unpacking”
|
|
- Игнорирование индекса в цикле
|
|
- Игнорирование значения в определенной позиции
|
|
Подчеркивание в i18n и l10n
- i18n - Internationalization: i(18 букв)n
- l10n - Localization: l(10 букв)n
- g11n - Globalization: g(11 букв)n
- l12y - Localizability: l(12 букв)y
Пример использования из офф. документации4:
|
|
Это просто соглашение, а не синтаксис функции.
Этого соглашения придерживается и модуль gettext
из встроенной стандартной библиотеки, и Django.
Подчеркивание для разделения цифр
Символ нижнего подчеркивания может использоваться для разделения цифр в больших числах.
|
|