说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
就 Python 语言而言,单下划线没有特殊意义,它是一个有效的标识符,就像 _foo
、foo_
或 _f_o_o_
一样。但因其在一些特殊场景下的用途我们值得介绍一下。单下划线的任何特殊含义都完全是按照惯例,并不是一种强制的要求,我们知道了这些很常见惯例才能读懂别人的代码。
交互式解释器将最后一次求值的结果保存 _
变量中,它与打印等内置功能一起存储在内置模块中。在其他地方, _
是常规标识符,它通常用于命名“特殊”项,但它对 Python 本身来说并不特殊。这一先例是由标准的CPython 解释器开创,其他解释器也纷纷效仿,支持了这个特性。
在 Python 3.10 及以上版本,在 match 语句中的 case 模式中,_
是表示通配符的软关键字。详见结构化模式匹配 match case。
不打算使用变量,但语法/语义需要名称时的伪装:
# 迭代忽略不用的内容
sum(1 for _ in some_iterable)
for _ in range(10):
do_something()
# 不考虑特定元素的拆包
head, *_ = values
# 函数忽略其参数
def callback(_):
return True
由于名称的查找方式,除非有全局或局部定义的影响,_
定义在 builtins._
,注意:某些 shell(如 ipython)有不指定给内置 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
在国际化和本地化上下文中,用作主要翻译功能的别名(https://docs.python.org/3/library/gettext.html#localizing-your-module)。
raise forms.ValidationError(_("Please enter a correct username"))
数字可以用单下划线连接,用做千分位,增加可读性:
243_343_343
(这个其实和下划线没啥关系)
需要注意的是在交互编码器中,变量需要执行返回值操作,才能赋值给下划线:
a = 8
a
# 8
_
# 8
# 注意,看下文解释
b = 9
_
# 8
_
# 8
这里的下划线不会取 b 因为上次的执行结果是 a 的值,所以仍然是 a 的值 8。
在Python中使用下划线有5种情况。
上文讲了在交互式解释器下,一个下划线代表上个值,那么两个和三个下划线呢?
a = 1
a
# 1
b = 2
b
# 2
c = 3
c
# 3
# 两个下划线
__
# 2
可见,两个下划线__
为倒数第二个执行值,那么三个下划线呢?
a = 1
a
# 1
b = 2
b
# 2
c = 3
c
# 3
# 三个下划线
___
# 1
三个下划线 ___
则是倒数第三个执行值。
四个下划线由于没有定义会报错:
____
# NameError: name '____' is not defined
以上在 Jupyter 上测试,是 ipython 交互式解释器的功能,非常方便。
下划线的使用,如同:
_
在 Prolog 的用法~
在 Matlab 的用法更新时间:2022-03-21 23:25:52 标签:python 下划线 变量