Какова цель единственной подчеркивания "_" в Python?

Каково значение _ после for в этом коде?

if tbh.bag:
   n = 0
   for _ in tbh.bag.atom_set():
      n += 1

4 ответа

Решение

_ имеет 3 основных традиционных использования в Python:

  1. Чтобы сохранить результат последнего выполненного выражения (/ оператор) в сеансе интерактивного интерпретатора. Этот прецедент был установлен стандартным интерпретатором CPython, и другие интерпретаторы последовали его примеру
  2. Для поиска перевода в i18n (см., Например, документацию gettext), как в коде:raise forms.ValidationError(_("Please enter a correct username"))
  3. В качестве универсального имени переменной "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.

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

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

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

  4. Использовать как функции "Интернационализация (i18n)" или "Локализация (l10n)".

  5. Для разделения цифр номера нужно буквальное значение.

Вот хорошая статья с примерами от 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._ но особый случай _.

  • В контексте интернационализации и локализации _ используется как псевдоним для основной функции перевода.

    gettext.gettext(сообщение)

    Возвращает локализованный перевод сообщения на основе текущего глобального домена, языка и каталога локали. Эта функция обычно имеет псевдоним _() в локальном пространстве имен (см. Примеры ниже).

Другие вопросы по тегам