9.6 Writing code in a notebook
notebook中的Python代码是按单元格Cells组织的。单元格就像一小段代码。逐行在单元格中输入代码,然后运行单元格的代码。一个单元格只能由一行代码组成,但也可以包含多行代码。一个笔记本通常包含多个单元格。
将代码行键入单元格。要运行代码,请按键盘上的Ctrl+Enter键,或单击单元格前面的“运行”图标,结果打印在单元格的正下方。
这个简单的例子,说明了Jupyter Notebook的几个关键点。
首先,将代码组织到单元格中,并逐单元格运行代码。其次,将结果打印在单元格下方,以便立即进行检查。如后面的示例所示,结果不仅限于打印文本,还可以包括图形、地图和其他可视化效果。
通过在每行代码后使用Enter键,可以为单个单元格添加多行代码。回想一下,在Python IDE中的一个典型交互窗口中,Enter键会导致正在运行的代码行。在 Jupyter笔记本中,当单击Run或Ctrl+Enter时,单个单元格的所有代码行都会运行,下面的示例显示了一个包含四行代码的单元格,并且在运行该单元格时打印得到的字符串。
结果不仅在打印消息时返回。考虑下面的示例代码,它统计字符串中出现的特殊字符的次数。
================================================================
这里参考其他人的博客,设置了自动补全代码:
pip install jupyter_contrib_nbextensions
jupyter nbextensions_configurator enable --user
上面的代码运行后,重新打开jupyter,可以看到Hinterland插件,勾选上要。
又参考了下面的代码和图
pip install jupyter_nbextensions_configurator jupyter_contrib_nbextensions
jupyter contrib nbextension install
jupyter nbextensions_configurator enable
之后就可以了
===============================================================
当单元运行时,结果显示为输出。因此,在Jupyter笔记本中没有必要使用print()函数打印消息,会直接打印在语句下面。
Jupyter Notebook使用了IPython接口的元素,如输入提示符In[n]
的使用所示,其中n是正整数,这个数字从1开始,并随着附加单元格的增加而增加。但是,每次再次运行同一单元格时,该数字也会增加。
例如,可以更改单元格的代码,然后再次运行该单元格。作为结果,用于输入提示和输出提示的数字被更新。
输入和输出的数字对代码执行没有影响。只需跟踪代码的运行顺序即可<可以通过单击内核>重新启动重新启动内核来重置数。
如前所述,内核是Jupyter Notebook的执行后端,您可以在命令提示符窗口中看到它的运行。本章中的示例通常以数字1开头每个新示例,但代码运行不需要从数字1开始。
单击笔记本顶部菜单上的“在下方插入单元格”按钮(加号)可以添加新单元格。单击顶部菜单上的“运行”按钮时,将执行当前单元格,并在下面自动添加一个新单元格。当您使用Shift+Enter键盘快捷键而不是Ctrl+Enter执行单元格时,也可以触发相同的操作。您也可以通过按键盘上的b键来添加单元格,但这需要您的光标不在单元格内,否则,您只需输入字符b。
下面的例子说明了两个单元格的使用,每个单元格都有自己的输出。
即使笔记本中的代码是逐单元格输入的,但任何以前使用的变量都存储在内存中,并且可以使用。从这个意义上说,笔记本就像一个普通的Python脚本,但它被组织成代码块(称为“单元”),这些代码块可以彼此分开运行。
将代码组织到单元格中会出现一些问题。例如,如果更新了一个变量,则必须先运行为该变量赋值的单元格,然后才能在其他单元格中使用该变量。考虑下面的例子,其中第一个单元格中的字符串是modified(将“Notebook”更改为“Notebok”会导致拼写错误),但该单元格没有运行。运行使用变量的第二个单元格会导致错误的答案,因为它仍在使用变量的早期值。在示例代码中,即使字符串“book”没有出现在字符串“Jupyter Notebok”中,结果也会打印True
解决方案是运行对变量进行更改的单元格,然后运行正在使用变量的单元格,当你习惯于运行Python脚本时,这有点违反直觉,因为pycharm等整个脚本都是默认运行的。
手动运行每个单元格的另一种方法是使用“单元格”菜单中的“全部运行”选项。当笔记本中有多个单元格并在顶部进行了更改时,这个选项非常有用, Run All命令按笔记本中列出的顺序运行所有单元格,并更新结果。
有许多工具可以管理笔记本中的单元格。可以选择一个单元格并使用工具栏中的工具之一,包括插入单元格(加号)、删除单元格(剪刀)、复制单元格、粘贴单元格、向上移动单元格(向上箭头)和向下移动单元格(向下箭头)<“编辑”菜单下还有几个附加选项,包括合并单元格和拆分单元格。
在笔记本中浏览单元格时,您可能已经注意到它们是如何在绿色和蓝色之间变化的。当单元格为绿色时,光标位于单元格内,您可以键入代码或文本。当单元格为蓝色时,会选中该单元格,但光标不在要编写代码的单元格内。
使用键盘快捷键时,单元格的颜色编码特别有用,因为当光标位于单元格内时,这些快捷键可能不起作用。
如果一直在更传统的IDE中编写常规Python脚本,那么在笔记本中使用单元格需要一些习惯。然而,在单元格中组织代码有很多优点。可以错误并再次运行代码,而不必使用多个窗口。考虑下面的例子,它使用Python 2中的print语句,而不是图中所示的print()函数。
可以更新代码行,然后再次运行单元格<不需要在不同的窗口中检查打印结果(通常在运行独立脚本时),也不需要将代码行复制并粘贴到新行中(通常在使用交互式解释器时)<也不需要运行笔记本中的所有单元格,因为可以进行更改,然后只运行感兴趣的单元格。