为什么不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
一样工作,如果你真的需要的话。 要点是,这只是设计师的偏好。