Значение символа подчеркивания в 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.
Подчеркивание для разделения цифр
Символ нижнего подчеркивания может использоваться для разделения цифр в больших числах. 
|  |  |