Python underscore as a function parameter

丶灬走出姿态 提交于 2019-11-30 06:13:47

In Python shells, the underscore (_) means the result of the last evaluated expression in the shell:

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

There's also _2, _3 and so on in IPython but not in the original Python interpreter. It has no special meaning in Python source code as far as I know, so I guess it is defined somewhere in your code if it runs without errors.

It doesn't have a special value in the code you write. It stores the result of the last expression you evaluated in your interactive interpreter and is used for convenience

underscore is considered a 'don't care' variable, furthermore IDEs like PyCharm will not give a warning for it if it is unused

so in a function

def q(a, b, _, c):
    pass

the IDE will underline a,b and c (unused parameter) but not the underscore

why would you use it and not omit the parameter?

->when you inherit from some class and want to override a function where you don't want to use some parameter

other common use is to indicate you don't want to use a part of a tuple when you iterate (or other unpacking) - this reduces clutter

names_and_food = [('michael', 'fruit'), ('eva', 'vegetables')]
for name, _ in names_and_food:
    print(name)

I cant find it in any python PEP, but pylint has it even in the FAQ

From what I've been able to figure out, it seems like this is the case:

_ is used to indicate that the input variable is a throwaway variable/parameter and thus might be required or expected, but will not be used in the code following it.

For example:

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

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

(Credit to this post)

The specific example I came across was this:

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

Yes it does have a meaning in your code, as this example shows:

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

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

As you can see, this allows you not to give a name to a returned value. But your case is different as the '_' is used as a parameter (the standard python shell expects it as a variable: NameError: name '_' is not defined).

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!