【问题标题】:Python underscore as a function parameterPython下划线作为函数参数
【发布时间】:2011-04-26 07:29:57
【问题描述】:

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

【问题讨论】:

  • 致回答这个问题的人:在(“正常”)python 代码不是中,单个下划线作为参数意味着什么在解释器中使用时?

标签: python parameters identifier metasyntactic-variable


【解决方案1】:

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

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

例如:

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

(归功于this post

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

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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

  • 您为什么认为这没有回答问题?在我看来,确实如此。
  • What does a single underscore _ as a parameter means? - 下划线作为函数参数,而不是语句(在交互式解释器中)
  • @DerteTrdelnik 它仍然是一个变量,即使它是作为表达式语句的整个表达式。 (此外,尽管使用了单词参数,但最初的问题询问了函数的 argument。)
【解决方案3】:

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

在函数中

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)

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

【讨论】:

    【解决方案4】:

    它在您编写的代码中没有特殊值。它存储您在交互式解释器中评估的最后一个表达式的结果,并用于方便

    【讨论】:

    • 在提示符下键入python 并按回车时获得的解释器。尝试在&gt;&gt;&gt; 提示符下输入3+4 回车,然后按回车。然后尝试打印_ 的值。你会得到7(最后一个表达式评估的结果)。