Какие существуют варианты использования одиночного подчеркивания (_) в Python

Ответ

В Python одиночное подчеркивание (_) — это не специальный синтаксис, а переменная, используемая по соглашению (convention) в нескольких различных сценариях.

  1. Игнорирование значения: Используется как "одноразовая" переменная, когда значение не важно и не будет использоваться. Часто встречается при распаковке кортежей или в циклах.

    # Игнорируем второй элемент
    a, _, c = (1, 2, 3)
    # print(a, c) -> 1 3
    
    # Значение итератора не нужно
    for _ in range(5):
        print("Hello, World!")
  2. Результат последнего выражения в REPL: В интерактивной консоли Python (REPL) _ автоматически хранит результат последнего выполненного выражения.

    >>> 10 + 5
    15
    >>> _ * 2
    30
  3. Соглашение для "внутренних" имен: Префикс _ (например, _internal_var) является соглашением, которое подсказывает другим разработчикам, что переменная или метод предназначены для внутреннего использования в модуле или классе и не являются частью публичного API.

  4. Локализация и интернационализация (i18n): В библиотеках для перевода, таких как gettext, _ часто используется как псевдоним для функции перевода строк.

    import gettext
    gettext.bindtextdomain('myapp', '/path/to/locale')
    gettext.textdomain('myapp')
    _ = gettext.gettext
    
    print(_('This is a translatable string.'))
  5. Разделитель в числовых литералах: Начиная с Python 3.6, _ можно использовать для визуального разделения разрядов в числах, что улучшает их читаемость.

    one_million = 1_000_000
    hex_address = 0xFF_EC_DE_5E

Ответ 18+ 🔞

Да ты посмотри, что за хуйня творится в этом вашем Python! Вот этот символ _ — это ж не какая-то магия, а просто переменная, которую договорились использовать по-разному. Как та самая мартышлюшка, которая и в цирке выступает, и на дереве сидит, и бананы жрёт.

Вот, например, когда тебе нахуй не нужно какое-то значение, а выкинуть его нельзя — вот тебе _ в помощь. Как будто говоришь: «Да похуй на это, засунь сюда, лишь бы место заняло».

# Второй элемент? Да нахуй он не нужен!
a, _, c = (1, 2, 3)

# Цикл просто должен пять раз отработать, а счётчик — пусть идёт на хуй
for _ in range(5):
    print("Привет, мир, ёпта!")

А в интерактивной консоли — это вообще отдельный цирк. _ там как последний оракул, помнит, что ты только что насчитал. Удобно, блядь, если лень копировать.

>>> 10 + 5
15
>>> _ * 2  # Берём то, что было, и ебём его на два
30

Ещё есть такая хитрая жопа: если назвать переменную с подчёркивания вначале, типа _secret, то это намёк другим программистам, мол, «это внутренняя кухня, не лезь, а то получишь вилкой в глаз». Хотя Python тебя не остановит — он ж не полицай, а язык программирования, блядь.

Для переводчиков текстов — это вообще священная корова. _ у них — это функция, которая строки переводит. Выглядит как будто бы магия, а на деле — просто договорённость, ёпта.

import gettext
_ = gettext.gettext  # Вот и вся магия, пизда
print(_('Строка для перевода'))

Ну и наконец, с Python 3.6 можно в числах _ вставлять, как разделитель, чтобы глаза не ебало, когда ты смотришь на миллион нулей. Чисто для красоты, как бантик на манде.

million = 1_000_000  # Смотри, какая красота, блядь!
hex_shit = 0xFF_EC_DE_5E

Вот и вся философия. Никакой ебалы с синтаксисом, просто договорились, чтобы жить было проще. А то без таких соглашений — вообще пиздец, каждый бы писал как бог на душу положит.