当前位置: 首页 > 知识库问答 >
问题:

在使用Jupyter笔记本的Python3中,“exit”关键字有什么作用?

贺宝
2023-03-14

我目前正在使用Python3在Jupyter笔记本和我刚刚遇到一个关键字退出。这个关键字是做什么的?

with open("some_file.txt") as f:
    for lines in f:
        print(lines)
        exit

共有3个答案

董意蕴
2023-03-14

在我的简单测试中,细胞1
a=3
细胞2
退出
细胞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
退出(keep_kernel=True)
细胞3
print(a)导致3

编辑:看起来@user2357112的答案填补了缺失的部分
EDIT2:实际上,它似乎是IPython的一个实例。果心自动呼叫。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).
邹博裕
2023-03-14

当在iPython中循环或条件语句的分支中使用出口(原文如此,没有括号)时,它什么也不做,因为它只是对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

但是,当单独在命令行上使用时,它被视为一种魔法(尽管没有%),并终止内核。

尹小云
2023-03-14

循环中的退出行不起任何作用。但是,为什么它们什么都不做比通常的原因要复杂一些,因为exit在Python中什么都不做。

通常,一行上的exit不会退出Python。在交互模式下,它最多会打印一条消息,告诉您如何退出Python(在\u sitebuiltins.Quitter.\uuu repr\uu中实现的消息):

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit

伊皮顿做了一些不同的事情。在IPython为方便交互而提供的众多额外系统中,有一个系统可以自动调用特定类型的实例,IPython。果心自动呼叫。IPyAutocall。(这类似于但不同于%autocall魔术。)

在IPython中,将退出和退出设置为IPython.core.autocall.ExitAutocall的实例,这是IPyAutocall的子类。IPython可以识别这种类型的对象,所以当执行仅包含出口退出的行时,IPython实际上会退出。

In [1]: exit
[IPython dies here]

Jupyter笔记本的IPython内核将退出和退出设置为非常相关的IPython.core.autocall.ZMQExitAutocall的实例,该实例具有一些额外的功能来支持keep_kernel参数否则一样。

不过,只有当引用可自动调用对象的行是单元格的全部内容时,才会触发此功能。在循环中,自动调用功能不会触发,所以我们回到了什么都没有发生的状态。

事实上,比正常交互模式下发生的情况还要少——在正常的非IPython交互会话中,此循环将打印“Use exit()…”由于IPython和常规交互模式处理表达式自动打印的方式不同,每次迭代时都会显示一条消息。

 类似资料:
  • 我是Jupyter笔记本电脑的新手,Jupyter笔记本电脑和JupyterLab的主要区别是什么,建议我选择最好的,以后应该使用。

  • 我在Windows 10上运行Anaconda,并使用Jupyter Notebook进行机器学习项目。 我最近开始意识到Conda中的虚拟环境。 我使用以下命令在conda中创建了一个虚拟环境 激活环境 ipykernel中安装的环境(不确定使用的术语是否正确) 现在环境是可见的jupyter笔记本,但当我启动它我得到

  • 问题内容: 我正在网上关注Java教程,尝试学习该语言,并且它在使用数组的两种语义之间反弹。 和: 该教程从未真正提到过为什么它会在两者之间来回切换,所以我对该主题进行了一些搜索。我目前的理解是,操作员正在创建“ longs数组”类型的对象。我 不 明白的是为什么我要那个,那有什么后果? 是否存在某些特定于“数组”的方法,除非它是“数组对象”,否则这些方法对数组不起作用? 有什么我 不能 用普通数

  • 问题内容: 怎么办?例如在函数中: 问题答案: 如果使用(或-ea简称)启动程序,则此语句 相当于 如果不使用此选项启动程序,则assert语句将无效。 例如,;在你的问题中发布的,等同于 (如果你启动的是。) Java语言规范assert正式为:14.10。该声明说: 14.10。的声明 的断言是一个含有一个布尔表达式语句。断言是启用还是禁用。如果启用了断言,则断言的执行将导致对布尔表达式进行求

  • 问题内容: python中“ yield”关键字有什么作用? 问题答案: 要了解其作用,你必须了解什么是生成器。并且,在你了解生成器之前,你必须了解。 可迭代 创建列表时,可以一一阅读它的项目。逐一读取其项称为迭代: 是一个可迭代的。当你使用列表推导时,你将创建一个列表,因此是可迭代的: 你可以使用的所有“ for… in…”都是可迭代的;lists,strings,文件… 这些可迭代的方法很方便

  • rank ▲ ✰ vote url 1 2888 2315 4033 url Python中关键字yield有什么作用? yield有什么用? 例如下面这段代码: def node._get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < s