_
имеет 4 основных традиционных использования в Python:
- Чтобы сохранить результат последнего выполненного выражения (/ оператор) в сеансе интерактивного интерпретатора. Этот прецедент был установлен стандартным интерпретатором CPython, и другие интерпретаторы последовали его примеру
- Для поиска перевода в i18n (см.,
Например, документацию gettext ), как в коде:
raise forms.ValidationError(_("Please enter a correct username"))
- В качестве «одноразового» имени переменной общего назначения, указывающего, что часть результата функции намеренно игнорируется (Концептуально, она отбрасывается.), Как в коде:
label, has_label, _ = text.partition(':')
.
- Как часть определения функции (с использованием либо
def
или lambda
), где сигнатура фиксируется (например, с помощью обратного вызова или API родительского класса), но этой конкретной реализации функции не нужны все параметры, как в коде, подобном следующему:callback = lambda _: True
(Долгое время в этом ответе перечислялись только первые три варианта использования, но четвертый случай встречался достаточно часто, как отмечалось здесь , чтобы его можно было явно перечислить)
Последний вариант использования «одноразовой переменной или имени параметра» может конфликтовать с вариантом использования поиска преобразования, поэтому необходимо избегать использования _
в качестве одноразовой переменной в любом блоке кода, который также использует ее для перевода i18n (многие люди предпочитают двойное подчеркивание , __
как их одноразовые переменные именно по этой причине).