Подчеркивание Python как параметр функции - PullRequest
18 голосов
/ 26 апреля 2011

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

Ответы [ 5 ]

13 голосов
/ 26 апреля 2011

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

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

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

3 голосов
/ 26 апреля 2011

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

2 голосов
/ 16 января 2019

подчеркивание считается переменной 'не заботиться', более того, 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

2 голосов
/ 16 января 2019

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

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

Например:

# 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
0 голосов
/ 26 апреля 2011

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

>>> 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).

...