使用Jupyter Notebook在Python3中使用`exit`关键字做什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Jupyter Notebook在Python3中使用`exit`关键字做什么?相关的知识,希望对你有一定的参考价值。
我目前在Jupyter Notebook中使用Python3,我刚刚遇到了关键字exit
。这个关键字有什么作用?
with open("some_file.txt") as f:
for lines in f:
print(lines)
exit
循环中的exit
行无效。然而,为什么他们什么都不做,比exit
在Python中什么都不做的通常原因要复杂一点。
通常情况下,exit
本身就不会退出Python。最多,在交互模式下,它会打印一条消息,告诉您如何退出Python(在_sitebuiltins.Quitter.__repr__
中实现的消息):
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
IPython做了不同的事情。在众多额外系统中,IPython具有交互式便利性,是autocall某种类型的IPython.core.autocall.IPyAutocall
实例系统。 (这与%autocall
魔法相似但不同。)
在IPython中,exit
和quit
被设置为IPython.core.autocall.ExitAutocall
的子类IPyAutocall
的实例。 IPython可识别此类型的对象,因此当执行仅包含exit
或quit
的行时,IPython实际上会退出。
In [1]: exit
[IPython dies here]
Jupyter笔记本的IPython内核将exit
和quit
设置为非常密切相关的IPython.core.autocall.ZMQExitAutocall
实例,它具有支持keep_kernel
参数的一些额外功能,但在其他方面是相同的。
但是,仅当引用自动对象对象的行是单元格的整个内容时,才会触发此功能。在循环内部,自动调用功能不会触发,因此我们不会发生任何事情。
事实上,发生的情况甚至比正常的交互模式更少 - 在正常的非IPython交互式会话中,由于IPython的不同,这个循环会在每次迭代时打印“使用exit()...”消息。和常规交互模式句柄表达式自动打印。
当在一个循环或一个条件语句的分支中在iPython中使用exit
(sic,没有括号)时,它什么都不做,因为它只是对IPython.core.autocall.ExitAutocall
实例的引用:
for i in range(10):
exit
print(i)
# 9
if i==9:
exit
print(exit)
# <IPython.core.autocall.ExitAutocall object at 0x7f76ad78a4a8>
它不会重启内核:
print(i)
# 9
但是,当单独在命令行上使用时,它被视为一种魔法(虽然没有%
)并终止内核。
在我的简单测试中,
细胞1
a = 3
细胞2
exit
细胞3
print(a)
结果
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-3f786850e387> in <module>
----> 1 a
NameError: name 'a' is not defined
exit
只是杀死了笔记本依赖执行的内核。
然而,有趣的是,似乎还有一个参数可以传递来修改该行为。
测试2:细胞1
a = 3
细胞2
exit(keep_kernel=True)
细胞3
print(a)
导致3
编辑:看起来像@ user2357112的答案填补了缺失的部分。
EDIT2:实际上,它似乎是IPython.core.autocall.ZMQExitAutocall
的一个例子
class IPython.core.autocall.ZMQExitAutocall(ip=None)
Bases: IPython.core.autocall.ExitAutocall
Exit IPython. Autocallable, so it needn’t be explicitly called.
Parameters: keep_kernel (bool) – If True, leave the kernel alive. Otherwise, tell the kernel to exit too (default).
以上是关于使用Jupyter Notebook在Python3中使用`exit`关键字做什么?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Jupyter Notebook中使用Python虚拟环境?
jupyter notebook同时使用python2和python3