2.2. 相关技术术语与概念

这一部分将介绍如何运行和保存 notebooks,熟悉 Jupyter notebook 的结构和交互界面。 在深入探讨了重启内核的重要性和方法后, 让我们继续探索Jupyter Notebook中其他一些能够提升工作效率和体验的技巧。

2.2.1. ipynb 文件

每个 ipynb 文件都是通过 JSON 格式来描述 notebook 的内容,包括每个单元及其内容, 都是通过 metadata 的格式展示。打开 ipynb 文件后, 菜单中选择 Edit->Edit Notebook Metadata ,进行编辑。

2.2.2. Notebook 界面

现在开始介绍 notebook 的界面信息, notebook的编辑界面可选择2种打开方式:“Open in notebook“ 和“Open in NbClassic“。 例如以“Open in NbClassic“的方式打开,如 图 2.13 所示。

两个术语

图 2.13 两个术语

这里有两个术语需要知道--cells 和 kernels ,两个都是非常重要的术语:

  • kernel :表示计算引擎,用于执行 notebook 中的代码块

  • cell :单元块,用于展示文本或者是代码。

2.2.3. 单元(Cells)

首先介绍的是 Cells ,它是 notebook 的主要部分, 通常有两种主要的 cell 形式:

  • Code cell :包括需要执行的代码,以及其运行结果

  • Markdown cell :包含的是 Markdown 格式的文本并且其执行结果

下图展示了一个简单的例子,第一行是 Jupyter 入门教程 这是一个 Markdown cell , 这里展示的是执行 cell 的结果,如果需要执行一个 cell ,可以点击 Run 按钮, 或者快捷键 Ctrl + Enter 即可。下方两个都是 Code cell ,第一个是导入第三方库, 第二个则是打印一段话以及其运行结果。 如 图 2.14 所示。

Jupyter 入门教程

图 2.14 Jupyter 入门教程

可以注意到 Code cell 的左侧会有一个标签 In [1] ,这里的数字表示该代码块运行的次序, 即在该 Notebook 中,如果没有执行,显示的是 In [ ] ,如果是该 Notebook 第一个运行的代码块, 则是 In [1] ,如果再次运行,则显示 In [2] ,依次类推,同个代码块多次执行,这个数字也是会改变的。 而 InInput 的缩写。如果代码块运行时间有点久,它会显示 In [*] ,表示当前代码块正在运行中。

对于 Notebook,还可以直接展示变量的数值,或者是函数的返回值,不需要调用 print 函数, 当然它只会打印当前单元的最后一行的内容。 如 图 2.15 所示。

展示变量数值

图 2.15 展示变量数值

还需要注意的是,对于一个单元,如果正在编辑,其边界框显示的是绿色,而运行时候则显示蓝色。 这里展示的就是两种模式,即绿色表示编辑模式,蓝色表示命令模式。

2.2.4. 快捷键

Notebook 有很多快捷键,可以通过菜单中的 Help->Keyboard Shortcuts 查看, 也可以直接用快捷键 Ctrl+Shift+P 查看。 编辑模式和命令模式可以通过 Esc 和 Enter 进行转换:一般是按 Esc 进入命令模式, Enter 进入编辑模式

下面简单介绍一些快捷键:

在命令模式下:

  • 在 cell 之间上下浏览采用上下箭头,或者 Up 和 Down 键

  • A 表示在当前 cell 上方插入一个新的 cell ,而 B 则是下方插入新的cell

  • M 表示变为 Markdown cell ,而 Y 是表示变为 Code cell

  • 连续按两次 D 是删除当前 cell

  • Z 是撤销操作

  • Shift 加上 Up 或者 Down 可以一次选择多个 cells ,采用 Shift + M 可以合并多个 cells

2.2.5. Markdown语法支持

Jupyter Notebook不仅支持代码编写,还支持Markdown和HTML格式的文本。 可在Notebook中插入格式化的文本、图片、链接和表格等,从而制作出既美观又内容丰富的文档。

Markdown 是一个轻量级的易于学习使用的标记语言,主要用于格式化文本文字。它的语法类似 HTML 语言, 是一个非常有帮助的语言,可以用于添加注释说明或者添加图片。

  • Markdown:可在一个新的代码单元中,选择“Markdown”模式(或使用快捷键M), 输入Markdown格式的文本。 Notebook会自动将其渲染为格式化后的文本。

  • HTML:也可直接在Markdown单元中插入HTML代码,Notebook会将其渲染为相应的HTML元素。

可以尝试在 Jupyter notebook 中输入下面的文字,记住是在 Markdown cell中:

# This is a level 1 heading
## This is a level 2 heading
This is some plain text that forms a paragraph.
Add emphasis via **bold** and __bold__, or *italic* and _italic_.
Paragraphs must be separated by an empty line.
* Sometimes we want to include lists.
* Which can be indented.
1. Lists can also be numbered.
2. For ordered lists.
[It is possible to include hyperlinks](https://www.example.com)
Inline code uses single backticks: `foo()`, and code blocks use triple backticks:
```
bar()
```
Or can be indented by 4 spaces:
foo()
And finally, adding images is easy: ![Alt text](https://www.example.com/image.jpg)

图 2.16 所示。

得到的结果

图 2.16 得到的结果

如果想添加图片,有三种做法:

  • 使用网络上的图片,添加其网络链接 URL,比如上述例子就是这种做法, URL 是 https://www.example.com/image.jpg

  • 采用一个本地 URL,那么图片就只能使用在该 notebook 中,比如在同一个 git 仓库中

  • 菜单栏选择 “Edit->Insert Image",这种做法会将图片转换为字符串形式并存储在 .ipynb 文件中, 这种做法会增加 ipynb 文件的大小

2.2.6. 魔法命令与魔法函数

为了方便使用, JupyterLab内置了一些非通用的,特殊的指令, 分为魔法命令与魔法函数。

魔法命令

Jupyter Notebook支持一种特殊的命令,称为“魔法命令”(Magic Commands), 它们以 % (行魔法命令)或 %% (单元魔法命令)开头。这些命令提供了许多有用的功能, 比如性能分析、时间测量、环境变量管理等。

  • %timeit :用于测量单个语句的执行时间。

  • %%writefile :将单元格的内容写入到文件中。

  • %matplotlib inline :在Jupyter Notebook中直接显示Matplotlib生成的图表。

魔法函数

单纯python要很麻烦才能实现的功能,魔法函数则可以简单的实现。

  • % :行魔法函数,只对本行代码生效。

  • %% :Cell魔法函数,在整个Cell中生效,必须放于Cell首行。

  • %lsmagic :列出所有的魔法函数

  • %magic :查看各个魔法函数的说明

  • ? :后面加上魔法函数名称,可以查看该函数的说明

一些常用魔法函数的示例:

魔法函数

作用

%%writefile

调用外部python脚本

%run

调用外部python脚本

%timeit

测试单行语句的执行时间

%%timeit

测试整个单元中代码的执行时间

%matplotlib inline

显示 matplotlib 包生成的图形

%%writefile

写入文件

%pdb

调试程序

%pwd

查看当前工作目录

%ls

查看目录文件列表

%reset

清除全部变量

%who

查看所有全局变量的名称,若给定类型参数,只返回该类型的变量列表

%whos

显示所有的全局变量名称、类型、值/信息

%xmode Plain

设置为当异常发生时只展示简单的异常信息

%xmode Verbose

设置为当异常发生时展示详细的异常信息

%debug

bug调试,输入quit退出调试

%env

列出全部环境变量

注意这些命令是在Python kernel中适用的,其他 kernel 不一定适用。