在这段代码中,_ after for的含义是什么?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
在这段代码中,_ after for的含义是什么?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
_在Python中有3个主要的常规用途:
To hold the result of the last executed expression in an interactive interpreter session (see docs). This precedent was set by the standard CPython interpreter, and other interpreters have followed suit For translation lookup in i18n (see the gettext documentation for example), as in code like raise forms.ValidationError(_("Please enter a correct username")) As a general purpose "throwaway" variable name: To indicate that part of 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 def or lambda), where the signature is fixed (e.g. by a callback or parent class API), but this particular function implementation doesn't need all of the parameters, 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 day is not used later in the code. The fix, if day is truly not needed, is to write year, month, _ = date(). Same with lambda functions, lambda arg: 1.0 creates 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 day but use dya in the next line). The pattern matching feature added in Python 3.10 elevated this usage from "convention" to "language syntax" where match statements are concerned: in match cases, _ is a wildcard pattern, and the runtime doesn't even bind a value to the symbol in that case. For other use cases, remember that _ is still a valid variable name, and hence will still keep objects alive. In cases where this is undesirable (e.g. to release memory or external resources) an explicit del name call will both satisfy linters that the name is being used, and promptly clear the reference to the object.
下划线_在Python中被认为是“I don't Care”或“Throwaway”变量
python解释器将最后一个表达式值存储到名为_的特殊变量中。 > > > 10 10 > > > _ 10 >>> _ * 3 30. 下划线_也用于忽略特定的值。如果您不需要特定的值或没有使用这些值,只需将值赋值为下划线。 在解包时忽略一个值 X, _, y = (1,2,3) > > > x 1 > > > y 3. 忽略索引 对于范围(10)中的_: do_something ()
在Python中有5种使用下划线的情况。
用于在解释器中存储最后一个表达式的值。 忽略特定的值。(所谓的“我不在乎”) 赋予变量或函数名特殊的含义和功能。 用作“国际化(i18n)”或“本地化(l10n)”函数。 分隔数字字面值的数字。
这是mingrammer写的一篇很好的文章。
就Python语言而言,_通常没有特殊的含义。它是一个有效的标识符,就像_foo, foo_或_f_o_o_一样。 自Python 3.10以来,唯一的例外是match语句:
在match语句中的大小写模式中,_是一个软关键字,表示通配符。源
否则,_的任何特殊含义都纯粹是约定的。以下几种情况比较常见:
A dummy name when a variable is not intended to be used, but a name is required by syntax/semantics. # iteration disregarding content sum(1 for _ in some_iterable) # unpacking disregarding specific elements head, *_ = values # function disregarding its argument def callback(_): return True Many REPLs/shells store the result of the last top-level expression to builtins._. The special identifier _ is used in the interactive interpreter to store the result of the last evaluation; it is stored in the builtins module. When not in interactive mode, _ has no special meaning and is not defined. [source] Due to the way names are looked up, unless shadowed by a global or local _ definition the bare _ refers to builtins._ . >>> 42 42 >>> f'the last answer is {_}' 'the last answer is 42' >>> _ 'the last answer is 42' >>> _ = 4 # shadow ``builtins._`` with global ``_`` >>> 23 23 >>> _ 4 Note: Some shells such as ipython do not assign to builtins._ but special-case _. In the context internationalization and localization, _ is used as an alias for the primary translation function. gettext.gettext(message) Return the localized translation of message, based on the current global domain, language, and locale directory. This function is usually aliased as _() in the local namespace (see examples below).