【问题标题】:Get Last Answer gets unpredictably redefined获得最后一个答案得到了不可预测的重新定义
【发布时间】:2018-03-07 03:58:11
【问题描述】:

我在交互式 python 会话中使用“获取最后一个答案”命令(又名 _)时遇到了一个奇怪的问题。我正在使用运行 ipython6.1.0 控制台的 python3.5 和 spyder3.2.3 的 anaconda python 发行版。

问题是这样的:有一段时间,发出 _ 命令会产生我期望的结果,即我输入到控制台的上一行代码的输出。但是,在我不理解为什么的情况下,命令 _ 的输出在前几行代码的输出上变得“冻结”。 _ 的所有后续调用都会产生此输出。我发现“重置” _ 行为的唯一方法是终止交互式会话并重新开始。

以前有人见过这个问题或知道我做错了什么吗?我怎样才能防止这种情况发生;或者有什么方法可以在不终止我的交互会话的情况下重置 _ 的行为?

感谢您的帮助。

阿德里安

【问题讨论】:

  • 100% 明确:您能否将发生这种情况的示例会话复制粘贴到您的问题中?
  • 我希望我的问题具有足够的重现性,以便我可以将其跟踪到一段代码!唉,我还没有找到导致 _ 被重新设置的代码 sn-p。我的代码中没有一行 _ = 。因为毕竟我是在交互式会话中工作,所以我可能自己无意中做到了这一点。我会继续测试。

标签: python-3.x ipython spyder


【解决方案1】:

最可能的答案是分配给_的东西;如果你有任何分配给_ 的代码,那么 IPython 不会尝试让它成为最新的输出。你可以尝试del _ 来恢复行为。

另一种可能性是您将输出与显示混淆了;如果它没有Out[.] 提示,则它不是输出。

和下面的区别是一样的:

>>> 1 + 1
2  # this is an output

>>> print(1 + 1)
2  # this is *not* an output

您还可以使用Out 列表访问以前的输出; Out[-1] 应该访问最后一个,以防 _ 因为分配而不可用。

【讨论】:

  • 通常的行为是,如果我在解释器中输入 _ = 200,然后调用 _,我会得到 200。但是如果我执行其他任何操作,例如 foo 类型,解释器会返回 176,然后 _ 返回 176。所以 _ 行为会自动重置。
  • 此外,del _ 的行为方式相同。如果我在解释器中输入 del _ ,然后调用 _ ,我会得到 NameError: name '_' is not defined。现在,如果我做任何其他产生输出的事情,比如 176,那么 _ 返回 176。再一次,似乎 _ 行为会自动重置。
  • 但是当我上面描述的“问题”发生时,这种通常的 _ 行为会发生变化。令人费解!
猜你喜欢
  • 1970-01-01
  • 2021-04-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2015-12-15
相关资源
最近更新 更多