Какова цель единственной подчеркивания "_" в Python?
Каково значение _
после for
в этом коде?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
4 ответа
_
имеет 3 основных традиционных использования в Python:
- Чтобы сохранить результат последнего выполненного выражения (/ оператор) в сеансе интерактивного интерпретатора. Этот прецедент был установлен стандартным интерпретатором CPython, и другие интерпретаторы последовали его примеру
- Для поиска перевода в i18n (см., Например, документацию gettext), как в коде:
raise forms.ValidationError(_("Please enter a correct username"))
- В качестве универсального имени переменной "throwaway", чтобы указать, что часть результата функции намеренно игнорируется, как в коде, подобном следующему:
label, has_label, _ = text.partition(':')
Последние две цели могут конфликтовать, поэтому необходимо избегать использования _
в качестве одноразовой переменной в любом блоке кода, который также использует ее для перевода i18n (многие предпочитают двойное подчеркивание, __
, как их одноразовые переменные именно по этой причине).
Это просто имя переменной, и в Python это принято _
для одноразовых переменных. Это просто указывает на то, что переменная цикла на самом деле не используется.
Нижнее подчеркивание _
в Python считается переменной " Мне все равно " или " Throwaway "
Интерпретатор python сохраняет последнее значение выражения в специальной переменной, называемой
_
,>>> 10 10 >>> _ 10 >>> _ * 3 30
Подчеркивание
_
также используется для игнорирования определенных значений. Если вам не нужны конкретные значения или значения не используются, просто присвойте значения подчеркиванию.Игнорировать значение при распаковке
x, _, y = (1, 2, 3) >>> x 1 >>> y 3
Игнорировать индекс
for _ in range(10): do_something()
Есть 5 случаев использования подчеркивания в Python.
Для хранения значения последнего выражения в интерпретаторе.
Для игнорирования конкретных значений. (так называемое "мне все равно")
Придавать особые значения и функции именам переменных или функций.
Использовать как функции "Интернационализация (i18n)" или "Локализация (l10n)".
Для разделения цифр номера нужно буквальное значение.
Вот хорошая статья с примерами от Mingrammer.
Что касается языков Python, _
не имеет особого значения. Это действительный идентификатор, как и_foo
, foo_
или _f_o_o_
.
Любое особое значение _
чисто условно. Часто встречается несколько случаев:
Фиктивное имя, когда переменная не предназначена для использования, но имя требуется синтаксисом / семантикой.
# iteration disregarding content sum(1 for _ in some_iterable) # unpacking disregarding specific elements head, *_ = values # function disregarding its argument def callback(_): return True
Многие REPL / оболочки сохраняют результат последнего выражения верхнего уровня в
builtins._
.Специальный идентификатор
_
используется в интерактивном интерпретаторе для хранения результата последней оценки; он хранится вbuiltins
модуль. Когда не в интерактивном режиме,_
не имеет особого значения и не определяется. [источник]Из-за способа поиска имен, если они не затенены глобальным или локальным
_
определение голого_
относится кbuiltins._
.>>> 42 42 >>> f'the last answer is {_}' 'the last answer is 42' >>> _ 'the last answer is 42' >>> _ = 4 # shadow ``builtins._`` with global ``_`` >>> 23 23 >>> _ 4
Примечание: некоторые оболочки, такие как
ipython
не назначатьbuiltins._
но особый случай_
.В контексте интернационализации и локализации
_
используется как псевдоним для основной функции перевода.Возвращает локализованный перевод сообщения на основе текущего глобального домена, языка и каталога локали. Эта функция обычно имеет псевдоним _() в локальном пространстве имен (см. Примеры ниже).