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