Python下划线作为函数参数

时间:2011-04-26 07:29:57

标签: python parameters identifier metasyntactic-variable

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

5 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

根据我的判断,似乎是这样:

func labelSizeHasBeenChangedAfterPinch(_ label:UILabel, currentSize:CGSize){ let MAX = 25 let MIN = 8 let RATE = -1 for proposedFontSize in stride(from: MAX, to: MIN, by: RATE){ let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin) let attribute = [NSAttributedString.Key.font:UIFont.systemFont(ofSize: CGFloat(proposedFontSize))] // let context = IF NEEDED ... let rect = NSString(string: label.text ?? "").boundingRect(with: currentSize, options: options, attributes: attribute, context: nil) let labelSizeThatFitProposedFontSize = CGSize(width: rect.width , height: rect.height) if (currentSize.height > labelSizeThatFitProposedFontSize.height) && (currentSize.width > labelSizeThatFitProposedFontSize.width){ DispatchQueue.main.async { label.font = UIFont.systemFont(ofSize: CGFloat(proposedFontSize)) } break } } } 用于表示输入变量是可丢弃变量/参数,因此可能是必需的或期望的,但在中不会使用其后的代码。

例如:

_

(贷记this post

我遇到的具体示例是:

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

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

答案 3 :(得分:2)

下划线被认为是“无关紧要”变量,此外,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 :(得分:-5)

是的,它确实在您的代码中有意义,如此示例所示:

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

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

如您所见,这样您就不会为返回值指定名称。但是你的情况不同,因为'_'用作参数(标准python shell期望它作为变量:NameError: name '_' is not defined)。