当前位置: 首页 > 面试题库 >

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

司马钱明
2023-03-14
问题内容

我在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解释器,并且旨在帮助进行交互式编码会话:

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

标准 Python解释去一些长度上虽然用户定义的值不踩; 如果您自己分配其他 东西
_那么解释器将不会覆盖它(从技术上讲,_变量__builtin__attribute,您自己的分配是“常规”全局变量)。但是,您没有使用标准的Python解释器。您正在使用IPython,并且该解释器不是那么小心。

IPython明确记录了此行为:

以下GLOBAL变量始终存在(因此请不要覆盖它们!):

  • [_] (一个下划线):存储先前的输出,例如Python的默认解释器。

[…]

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

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

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



 类似资料:
  • >>> class MyClass(): ... def __init__(self): ... self.__superprivate = "Hello" ... self._semiprivate = ", world!" ... >>> mc = MyClass() >>> print mc.__superprivate Traceback (most recen

  • 本文向大家介绍python中单下划线和双下划线分别是什么?相关面试题,主要包含被问及python中单下划线和双下划线分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 name:一种约定,python内部的名字,是用来与用户自动以的名字区分开,防止冲突

  • 问题内容: 我找不到与此主题相关的其他主题或文档-有没有人成功地在pythons matplotlib包中强调了这一点?对于所有其他属性,我使用的语法是这样的: 但是,我无法弄清楚如何在此文本下划线,除非将一行实际编码到文件中。 有什么想法吗? 问题答案: Matplotlib可以使用LaTeX处理所有文本,有关更多信息,请参见文档的本页。在LaTeX中为文本加下划线的命令很简单。从以下示例脚本之

  • 问题内容: 该代码段的作用是什么? 我知道使用“ _”作为空白标识符,但是上述第二行实现了什么? 这是etcd GitHub存储库中的示例:etcd 问题答案: 该代码是机器生成的。生成器添加了这些语句,以避免在没有封送的情况下使用未声明的变量。 代码生成器的作者可能发现添加空白赋值语句比不需要时省略变量更容易。

  • 问题内容: 通过阅读Peter Norvig的《解决每个数独难题》一文,我遇到了一些以前从未见过的Python习语。 我知道一个函数可以返回一个元组/值列表,在这种情况下,您可以将多个变量分配给结果,例如 但是以下各项的含义是什么? 如果是,那么此陈述与之有何不同? 关于在作业中使用下划线的另一个问题是: 下划线是否具有基本上丢弃列表中返回的第一个值的效果? 问题答案: 就像一样,除了解包1个元素

  • 问题内容: 此代码中的 是什么意思? 问题答案: 在Python中有4种主要的常规用法: 在交互式解释器会话中保存上次执行的表达式的结果。此先例是由标准CPython解释器设定的,其他解释器也纷纷效仿 在i18n中进行翻译查找( 例如,参见 gettext文档),如代码所示: 作为通用“一次性”的变量名指示函数结果的一部分被故意忽略(在概念上,它被丢弃。),如类似的代码: 。 作为函数定义的一部分