← Назад к вопросам

Почему стоит использовать underscore?

1.0 Junior🔥 91 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Использование Underscore в Python

Underscore (_) — это мощный и многофункциональный инструмент в Python, который часто недооценивается новичками. Давайте разберём, почему его стоит активно использовать.

1. Восстановление последнего значения в REPL

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

>>> 5 + 3
8
>>> _ * 2  # используем последний результат
16
>>> result = _  # сохраняем для дальнейшего использования
>>> print(result)
16

2. Обозначение игнорируемых переменных

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

# Плохо: непонятно зачем переменная
name, age, email, phone = data
if name == "John":
    print(name, age)

# Хорошо: явно видно, что email и phone не используются
name, age, _, _ = data

# Или с распаковкой
name, *_, last_element = some_list

# Для функций, возвращающих множество значений
success, _, error_message = process_request()
if not success:
    print(error_message)

3. Предотвращение конфликтов с ключевыми словами

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

# Плохо: SyntaxError
class = "MyClass"  # class — ключевое слово

# Хорошо:
class_ = "MyClass"
import_ = __import__
from_ = "source"
return_ = calculate_value()

4. Условные переменные класса

Полиглот используют underscore для обозначения приватных переменных и методов на уровне соглашения:

class BankAccount:
    def __init__(self, balance):
        self._balance = balance  # "приватная" переменная
    
    def _validate_amount(self, amount):  # "приватный" метод
        return amount > 0
    
    def withdraw(self, amount):
        if self._validate_amount(amount):
            self._balance -= amount
            return True
        return False

# Пользователь видит, что это приватное — НЕ трогать
acc = BankAccount(1000)
print(acc._balance)  # Технически возможно, но явно не рекомендуется

5. Увеличение читаемости больших чисел (Python 3.6+)

Underscore используется как разделитель в числовых литералах для улучшения читаемости:

# Без underscore — сложно считать нули
million = 1000000
billion = 1000000000

# С underscore — намного понятнее
million = 1_000_000
billion = 1_000_000_000
price_in_cents = 9_999_99
hex_color = 0xFF_FF_FF
binary_mask = 0b1111_0000

6. Интернационализация (i18n)

Есть давняя традиция использовать _() как функцию-алиас для gettext() при локализации приложений:

from gettext import gettext as _

message = _("Hello, world!")  # будет переведено
print(_("Welcome!"))

Выводы

Используй underscore:

  • ✅ Для игнорируемых переменных — это делает намерение ясным
  • ✅ Для разделения больших чисел — повышает читаемость кода
  • ✅ Для обозначения приватных членов класса — это соглашение сообщества
  • ✅ В REPL для работы с последним результатом — экономит время

Essentially, underscore — это питонический способ сообщить другим разработчикам и своему будущему "я" о намерениях кода. Это не просто синтаксис, это философия Python: "Явное лучше, чем неявное".