Python下划线作为函数参数

Ste*_*eve 21 python parameters identifier metasyntactic-variable

我有一个特定于python的问题.单个下划线_作为参数意味着什么?我有一个函数调用hexdump(_)._从未被定义过,所以我猜它有一些特殊的价值,我找不到一个参考,告诉我它在网上意味着什么.如果你能告诉我,我会很高兴的.

Tam*_*más 12

在Python shell中,下划线(_)表示shell中最后一次计算表达式的结果:

>>> 2+3
5
>>> _
5
Run Code Online (Sandbox Code Playgroud)

在IPython中也有_2,_3等等,但在原始的Python解释器中却没有.据我所知,它在Python源代码中没有特殊含义,所以我猜它是在代码中的某个地方定义的,如果它运行没有错误.

  • `单个下划线 _ 作为参数意味着什么?` - 下划线作为函数参数,而不是作为语句(在交互式解释器中) (2认同)

Mar*_*rco 9

据我所知,情况似乎是这样:

_用于指示输入变量是一次性变量/参数,因此可能是必需的或预期的,但不会不会在其后的代码中使用。

例如:

# Ignore a value of specific location/index 
for _ in range(10) 
    print("Test")
  
# Ignore a value when unpacking 
a,b,_,_ = my_method(var1) 
Run Code Online (Sandbox Code Playgroud)

(归功于 这篇文章

我遇到的具体例子是这样的:

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

  • 令人惊奇的是我是如何来到这里获取完全相同的示例(在 https://github.com/apache/spark/blob/master/examples/src/main/python/pi.py 中找到)哈哈 (3认同)

Der*_*nik 5

下划线被认为是一个“不关心”的变量,此外,如果未使用,像 PyCharm 这样的 IDE 不会给出警告

所以在一个函数中

def q(a, b, _, c):
    pass
Run Code Online (Sandbox Code Playgroud)

IDE 将在 a、b 和 c(未使用的参数)下划线,但不会在下划线下划线

为什么要使用它而不省略参数?

->当您从某个类继承并想要覆盖不想使用某些参数的函数时

其他常见用途是表明您在迭代(或其他解包)时不想使用元组的一部分 - 这会减少混乱

names_and_food = [('michael', 'fruit'), ('eva', 'vegetables')]
for name, _ in names_and_food:
    print(name)
Run Code Online (Sandbox Code Playgroud)

我在任何 python PEP 中都找不到它,但是 pylint 甚至在FAQ 中都有它