Python подчеркивает как параметр функции

У меня есть вопрос по Python. Что означает одиночное подчеркивание _ в качестве параметра? У меня есть функция, вызывающая hexdump(_). _ Никогда не был определен, поэтому я думаю, что он имеет какое-то особое значение, я не смог найти ссылку, сообщающую мне, что это значит в сети. Я был бы счастлив, если бы вы могли мне сказать.

Ответ 1

В оболочках Python символ подчеркивания (_) означает результат последнего оцененного выражения в оболочке:

>>> 2+3
5
>>> _
5

Там также _2, _3 и т.д. в IPython, но не в исходном интерпретаторе Python. Насколько я знаю, он не имеет особого значения в исходном коде Python, поэтому я предполагаю, что он определен где-то в вашем коде, если он работает без ошибок.

Ответ 2

Он не имеет специального значения в коде, который вы пишете. Он сохраняет результат последнего выражения, которое вы оценили в интерактивном интерпретаторе, и используется для удобства

Ответ 3

Из того, что я смог выяснить, кажется, что это так:

_ используется, чтобы указать, что входная переменная является одноразовой переменной/параметром и, следовательно, может быть обязательной или ожидаемой, но не будет использоваться в коде, следующем за ней.

Например:

# Ignore a value of specific location/index 
for _ in rang(10) 
    print "Test"

# Ignore a value when unpacking 
a,b,_,_ = my_method(var1) 

(Кредит на этот пост)

Конкретный пример, с которым я столкнулся, был такой:

    def f(_):
        x = random() * 2 - 1
        y = random() * 2 - 1
        return 1 if x ** 2 + y ** 2 < 1 else 0

Ответ 4

подчеркивание считается переменной "пофиг", более того, IDE, такие как PyCharm, не будут предупреждать об этом, если она не используется

так в функции

def q(a, b, _, c):
    pass

IDE подчеркнет a, b и c (неиспользуемый параметр), но не подчеркивание

почему вы используете его и не пропустите параметр?

→ когда вы наследуете от некоторого класса и хотите переопределить функцию, где вы не хотите использовать какой-либо параметр

Другое распространенное использование - указать, что вы не хотите использовать часть кортежа при итерации (или другой распаковке) - это уменьшает беспорядок

names_and_food = [('michael', 'fruit'), ('eva', 'vegetables')]
for name, _ in names_and_food:
    print(name)

Я не могу найти его в любом PEP Python, но Pylint есть даже в FAQ

Ответ 5

Да, это имеет смысл в вашем коде, как показано в этом примере:

>>> def f(x):
    return (x, x + 2)

>>> (i, j) = f(5)
>>> i
5
>>> j
7
>>> (k, _) = f(7)
>>> k
7

Как вы можете видеть, это позволяет не указывать имя возвращенному значению. Но ваш случай отличается от того, что "_" используется как параметр (стандартная оболочка python ожидает его как переменную: NameError: name '_' is not defined).