内置函数quit()
在Python-3.x和IPython 3中的行为不同。如果在IPython中执行,则下列代码会打印Hello
,但不会打印任何内容Python:在Python-3.x和IPython中quit()的工作方式不同
quit()
print("Hello")
IPython中quit()
的用途是什么?改变其行为的原因是什么?
内置函数quit()
在Python-3.x和IPython 3中的行为不同。如果在IPython中执行,则下列代码会打印Hello
,但不会打印任何内容Python:在Python-3.x和IPython中quit()的工作方式不同
quit()
print("Hello")
IPython中quit()
的用途是什么?改变其行为的原因是什么?
它看起来像IPython
的quit
/exit
“功能”简化为只设置一个标志来说“你应该退出,当这是下一次检查”。它本身并没有提高SystemExit
,所以它可能取决于间歇性检查,如果你一次排队这两个命令,直到第二个命令结束才执行。
您可以在IPython提示符处自行检查,首先运行quit??
,以查看它是否为可调用类,其__call__
代表为self._ip.ask_exit()
。接下来,运行quit._ip.ask_exit??
,您会看到ask_exit
只设置了一个标志self.exit_now = True
(如果您检查它,它是一个普通属性,而不是带有隐藏代码执行的property
)。
不客气地追问IPython
正在检查那个;我猜这是在IPython
完成任何给定的行或单元后完成的。
从根本上说,区别在于IPython中的quit
在Python的常规交互式中断器中从未像quit
一样; quit
/exit
作为一个内置的目的是替代替代交互式解释器,并不需要表现完全一样。如果您想要一致的退出行为,请输入import sys
并运行sys.exit()
,这也是在脚本内部早期退出的正确方法,并且不能用作交互式提示的钩子。
'quit'甚至不是内建的。 –
正如我上面所说,它是:https://docs.python.org/3/library/constants.html – DyZ
@ juanpa.arrivillaga:排序。它是一个特殊的'Quitter'类的实例,它看起来是在Python中实现的(它有像'repr'这样有用的附加功能,可以提醒你如果键入'quit'并忘记调用它,就需要添加括号)。它仅仅是一个内建的,因为它随核心Python一起提供,而不是CPython解释器核心的实际部分或'__builtins__'的C级实现或任何其他东西,它只是被'site'推到'__builtins__'中。 (在技术上,'site'自动导入可以被禁用,尽管这很少完成)。 – ShadowRanger
这是为了退出翻译会议......?这对我行得通。无论如何,说一般的交互式Python解释器REPL和IPython之间的区别可能更为精确。 IPython与Python 3.x没有区别......无论如何,你是否真的在用'ipython'运行脚本? quit函数只是用于退出python shell会话,不应该在脚本中使用。 –
@ juanpa.arrivillaga由于打印出“Hello”,IPython中的apparenlty quit()并不真正退出解释器 - 至少不会立即。 – DyZ
它的确如果你在解释器* shell会话*,这就是它的意思。这可能是一些松散的结局,因为没有人认为你会在交互式提示符之外使用'quit'。 –