gpt4 book ai didi

python - 在 Python/IPython 解释器中为单个下划线 _ 赋值

转载 作者:IT老高 更新时间:2023-10-28 21:37:41 26 4
gpt4 key购买 nike

我在 Python 2.7 中使用 ipython 创建了这个函数:

def _(v):
return v

稍后如果我调用 _(somevalue),我会得到 _ = somevalue

in[3]: _(3)
out[3]: 3
in[4]: print _
out[4]: 3

功能消失了!如果我调用 _(4) 我会得到:

TypeError: 'int' object is not callable

为什么?这个函数有什么问题?

最佳答案

Python 解释器将最后一个表达式值赋给 _ .

此行为仅限于 REPL interpreter仅用于协助交互式编码 session :

>>> import math
>>> math.pow(3.0, 5)
243.0
>>> result = _
>>> result
243.0

标准 Python 解释器在一定程度上不践踏用户定义的值;如果你自己给 _ 赋值 else那么解释器不会覆盖它(从技术上讲, _ variable is a __builtin__ attribute ,您自己的分配是“常规”全局变量)。不过,您没有使用标准的 Python 解释器;你正在使用 IPython,而那个解释器没有那么小心。

IPython documents this behaviour explicitly :

The following GLOBAL variables always exist (so don’t overwrite them!):

  • [_] (a single underscore) : stores previous output, like Python’s default interpreter.

[...]

在标准 Python REPL 环境中,如果您将某些内容分配给 _您仍然可以通过 __builtins__._ 访问最后一个表达式结果或删除_再次遮蔽它的全局变量 (del _)。

在 Python 解释器之外,_按照惯例,用作可翻译文本函数的名称(参见 gettext module;外部工具会查找该函数以提取可翻译字符串)。

而且,按照惯例,使用 _作为分配目标告诉读者您的代码您将忽略该值;例如[random.random() for _ in range(5)]生成 5 个随机浮点值的列表,或 foo, bar, _ = three_values不会使用从元组分配中发出第三个值的信号。当_已用于 gettext功能,__可以用于相同的目的。

关于python - 在 Python/IPython 解释器中为单个下划线 _ 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com