What is the purpose of the single underscore "_" variable in Python?
Каково назначение переменной с одним подчеркиванием "_" в Python?
Что означает _ after for в этом коде?
if tbh.bag: n = 0 for _ in tbh.bag.atom_set(): n += 1
Переведено автоматически
Ответ 1
_ имеет 3 основных традиционных применения в Python:
Для хранения результата последнего выполненного выражения в сеансе интерактивного интерпретатора (см. Документы). Этот прецедент был создан стандартным интерпретатором CPython, и другие интерпретаторы последовали его примеру
Для поиска перевода в i18n (см., Например, Документацию по gettext), как в коде типа
raise forms.ValidationError(_("Please enter a correct username"))
В качестве универсального "одноразового" имени переменной:
Чтобы указать, что часть результата функции намеренно игнорируется (концептуально, она отбрасывается.), как в коде типа:
label, has_label, _ = text.partition(':')
Как часть определения функции (используя либо def, либо lambda), где сигнатура фиксирована (например, обратным вызовом или API родительского класса), но для реализации этой конкретной функции не нужны все параметры, как в коде типа:
defcallback(_): returnTrue
[Долгое время в этом ответе не перечислялся этот вариант использования, но он появлялся достаточно часто, как отмечено здесь, чтобы его стоило перечислить явно.]
Этот вариант использования может конфликтовать с вариантом использования поиска перевода, поэтому необходимо избегать использования _ в качестве одноразовой переменной в любом блоке кода, который также использует ее для перевода i18n (многие люди предпочитают двойное подчеркивание, __, в качестве одноразовой переменной именно по этой причине).
Линтеры часто распознают этот вариант использования. Например, year, month, day = date() выдаст предупреждение о линте, если day не используется позже в коде. Исправление, если day оно действительно не требуется, заключается в записи year, month, _ = date(). То же самое с лямбда-функциями, lambda arg: 1.0 создает функцию, требующую одного аргумента, но не использующую его, которая будет перехвачена lint . Исправление заключается в записи lambda _: 1.0. Неиспользуемая переменная часто скрывает ошибку / опечатку (например, set day но use dya в следующей строке).
Функция сопоставления с образцом, добавленная в Python 3.10, повысила это использование с "соглашения" до "синтаксиса языка", когда речь идет о match операторах: в случаях совпадения, _ является шаблоном подстановочных знаков, и среда выполнения даже не привязывает значение к символу в этом случае.
Для других вариантов использования помните, что _ по-прежнему является допустимым именем переменной и, следовательно, по-прежнему сохраняет объекты живыми. В случаях, когда это нежелательно (например, для освобождения памяти или внешних ресурсов), явный del name вызов одновременно удовлетворит запросы о том, что используется имя, и быстро очистит ссылку на объект.
Ответ 2
Это просто имя переменной, и в python его принято использовать _ для одноразовых переменных. Это просто указывает на то, что переменная цикла фактически не используется.
Ответ 3
Подчеркивание _ рассматривается как переменная "Мне все равно" или "Одноразовая" в Python
Интерпретатор python сохраняет последнее значение выражения в специальной переменной с именем _.
>>> 10 10
>>> _ 10
>>> _ * 3 30
Подчеркивание _ также используется для игнорирования определенных значений. Если вам не нужны конкретные значения или значения не используются, просто присвоите значения подчеркиванию.
Игнорируйте значение при распаковке
x, _, y = (1, 2, 3)
>>> x 1
>>> y 3
Игнорировать индекс
for _ inrange(10): do_something()
Ответ 4
Существует 5 вариантов использования подчеркивания в Python.
Для хранения значения последнего выражения в интерпретаторе.
Для игнорирования определенных значений. (так называемое “мне все равно”)
Для придания особых значений и функций именам переменных или функций.
Для использования в качестве функций ‘интернационализации (i18n)’ или ‘локализации (l10n)’.