Вопрос-Ответ

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:


  1. Для хранения результата последнего выполненного выражения в сеансе интерактивного интерпретатора (см. Документы). Этот прецедент был создан стандартным интерпретатором CPython, и другие интерпретаторы последовали его примеру



  2. Для поиска перевода в i18n (см., Например, Документацию по gettext), как в коде типа


    raise forms.ValidationError(_("Please enter a correct username"))


  3. В качестве универсального "одноразового" имени переменной:



    1. Чтобы указать, что часть результата функции намеренно игнорируется (концептуально, она отбрасывается.), как в коде типа:


      label, has_label, _ = text.partition(':')


    2. Как часть определения функции (используя либо def, либо lambda), где
      сигнатура фиксирована (например, обратным вызовом или API родительского класса), но
      для реализации этой конкретной функции не нужны все
      параметры, как в коде типа:


      def callback(_):
      return True

      [Долгое время в этом ответе не перечислялся этот вариант использования, но он появлялся достаточно часто, как отмечено здесь, чтобы его стоило перечислить явно.]




    Этот вариант использования может конфликтовать с вариантом использования поиска перевода, поэтому необходимо избегать использования _ в качестве одноразовой переменной в любом блоке кода, который также использует ее для перевода 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 _ in range(10):     
    do_something()

Ответ 4

Существует 5 вариантов использования подчеркивания в Python.


  1. Для хранения значения последнего выражения в интерпретаторе.



  2. Для игнорирования определенных значений. (так называемое “мне все равно”)



  3. Для придания особых значений и функций именам переменных или функций.



  4. Для использования в качестве функций ‘интернационализации (i18n)’ или ‘локализации (l10n)’.



  5. Для разделения цифр литерального значения числа.



Вот хорошая статья с примерами от mingrammer.

2023-07-03 23:23 python