为什么不QtConsole回声next()?

我发现这个关于Python中迭代器行为的问题:

Python列表迭代器行为和next(迭代器)

当我输入代码时:

a = iter(list(range(10)))
for i in a:
    print a
    next(a)

进入它返回的jupyter-qtconsole

0
2
4
6
8

就像Martijn Pieters所说的那样,当解释者没有回应next(a)的呼叫时。

但是,当我在Bash解释器和IDLE中再次运行相同的代码时,打印的代码为:

0
1
2
3
4
5
6
7
8
9

到控制台。

我跑了代码:

import platform
platform.python_implementation()

在所有三种环境中,他们都说我跑了'CPython'

那么为什么QtConsole在IDLE和Bash不行时会抑制next(a)调用?

如果有帮助,我在Mac OSX上运行Python 2.7.9并使用Anaconda发行版。


这只是IPython开发人员( QtConsole所基于的)选择应该回馈给用户的选择。

具体而言,在所使用的InteractiveShell类中,默认情况下,函数run_ast_nodes使用interactivity='last_expr'定义。 有关此属性的文档指出:

interactivity : str
  'all', 'last', 'last_expr' or 'none', specifying which nodes should be
  run interactively (displaying output from expressions). 'last_expr'
  will run the last node interactively only if it is an expression (i.e.
  expressions in loops or other blocks are not displayed. Other values
  for this parameter will raise a ValueError.

如您所见: 循环或其他块中的表达式不会显示

你可以在IPython的配置文件中改变它,并且像你的repl一样工作,如果你真的需要的话。 要点是,这只是设计师的偏好。

链接地址: http://www.djcxy.com/p/35725.html

上一篇: Why doesn't QtConsole echo next()?

下一篇: Swift Array Performance Issue?