Каково назначение переменной одно подчеркивание «_»?
Что означает _ после for в этом коде?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
перевод вопроса What is the purpose of the single underscore "_" variable in Python? от участника @alwbtc
Ответы (1 шт):
_ имеет 5 основных стандартных применений в Python:
Для хранения результата последнего выполненного выражения в сеансе интерактивного интерпретатора. Этот прецедент был создан стандартным интерпретатором CPython, и другие интерпретаторы последовали его примеру.
В качестве универсального имени переменной, указывающей на то, что часть результата функции намеренно игнорируется (концептуально, она отбрасывается.). Как в коде типа:
label, has_label, _ = text.partition(':')Как часть определения функции (используя либо
defилиlambda), где сигнатура фиксируется (например, обратным вызовом или родительским классом API), но эта конкретная реализация функции не нуждается во всех параметры, как в коде, например:callback = lambda _: TrueЛинтер python распознает подчеркивание как преднамеренно неиспользуемую переменную (оба варианта использования указаны выше). Например
year, month, day = date()вызовет предупреждение о ворсе, если переменная
dayне будет использоваться позже в коде, еслиdayдействительно не нужен, то исправить можно так:year, month, _ = date()То же самое с лямбда-функциями
lambda arg: 1.0создает функцию, требующую один аргумент, но не использующую его, которая будет перехвачена lint, это можно исправить написав
lambda _: 1.0Неиспользуемая переменная часто скрывает ошибку/опечатку (установлен
day, но в следующей строке используетсяdya)Для поиска перевода в i18n (см. например документацияю gettext), как в подобном коде
raise forms.ValidationError(_("Please enter a correct username"))Использование подчеркивания для переводе взято из примеров документации, которые копировались/вставлялись десятилетиями, например:
import gettext gettext.bindtextdomain('myapplication', '/path/to/my/language/directory') gettext.textdomain('myapplication') _ = gettext.gettext # ... print(_('Это переводимая строка.'))