What is the purpose of the single underscore "_" variable in Python?
_ has 3 main conventional uses in Python:
To hold the result of the last executed expression in an interactiveinterpreter session (see docs). This precedent was set by the standard CPythoninterpreter, and other interpreters have followed suit
For translation lookup in i18n (see thegettextdocumentation for example), as in code like
raise forms.ValidationError(_("Please enter a correct username"))
As a general purpose "throwaway" variable name:
To indicate that partof a function result is being deliberately ignored (Conceptually, it is being discarded.), as in code like:
label, has_label, _ = text.partition(':')
As part of a function definition (using either
lambda), wherethe signature is fixed (e.g. by a callback or parent class API), butthis particular function implementation doesn't need all of theparameters, as in code like:
def callback(_): return True
[For a long time this answer didn't list this use case, but it came up often enough, as noted here, to be worth listing explicitly.]
This use case can conflict with the translation lookup use case, so it is necessary to avoid using
_as a throwaway variable in any code block that also uses it for i18n translation (many folks prefer a double-underscore,
__, as their throwaway variable for exactly this reason).
Linters often recognize this use case. For example
year, month, day = date()will raise a lint warning if
dayis not used later in the code. The fix, if
dayis truly not needed, is to write
year, month, _ = date(). Same with lambda functions,
lambda arg: 1.0creates a function requiring one argument but not using it, which will be caught by lint. The fix is to write
lambda _: 1.0. An unused variable is often hiding a bug/typo (e.g. set
dyain the next line).
_ is considered as "I don't Care" or "Throwaway" variable in Python
The python interpreter stores the last expression value to the special variable called
10 10_ 10_ * 3 30
_is also used for ignoring the specific values. If you don’t need the specific values or the values are not used, just assign the values to underscore.
Ignore a value when unpacking
x, _, y = (1, 2, 3) x1y 3
Ignore the index
for _ in range(10): do_something()