第2章 Python语法基础,IPython和Jupyter Notebooks
2.1 Python解释器
Python是解释性语言。Python解释器同一时间只能运行一个程序的一条语句。
要退出Python解释器返回终端,可以输入exit()或按Ctrl-D。
2.2 IPython基础
- 运行IPython Shell
可以通过输入代码并按Return(或Enter),运行任意Python语句。IPython还支持执行任意代码块(通过复制-粘贴方法)和整段Python脚本的功能。
- 运行Jupyter Notebook
notebook是Jupyter项目的重要组件之一,它是一个代码、文本(有标记或无标记)、数据可视化或其它输出的交互式文档。Jupyter Notebook需要与内核互动,内核是Jupyter与其它编程语言的交互编程协议。Python的Jupyter内核是使用IPython。要启动Jupyter,在命令行中输入jupyter notebook:
- Tab补全
从外观上,IPython shell和标准的Python解释器只是看起来不同。IPython shell的进步之一是具备其它IDE和交互计算分析环境都有的tab补全功能。在shell中输入表达式,按下Tab,会搜索已输入变量(对象、函数等等)的命名空间。
默认情况下,IPython会隐藏下划线开头的方法和属性,这些也可以tab补全,但是你必须首先键入一个下划线才能看到它们。
除了补全命名、对象和模块属性,Tab还可以补全其它的。当输入看似文件路径时(即使是Python字符串),按下Tab也可以补全电脑上对应的文件信息。
- 自省
在变量前后使用问号?,可以显示对象的信息。
如果对象是一个函数或实例方法,定义过的文档字符串,也会显示出信息。假设我们写了一个如下的函数:
然后使用?符号,就可以显示如下的文档字符串:
使用??会显示函数的源码:
?还有一个用途,就是像Unix或Windows命令行一样搜索IPython的命名空间。字符与通配符结合可以匹配所有的名字。例如,我们可以获得所有包含load的顶级NumPy命名空间:
- %run命令
可以用%run命令运行所有的Python程序。
如果一个Python脚本需要命令行参数(在sys。argv中查找),可以在文件路径之后传递,就像在命令行上运行一样。
如果想让一个脚本访问IPython已经定义过的变量,可以使用%run -i。
在Jupyter notebook中,你也可以使用%load,它将脚本导入到一个代码格中:
- 中断运行的代码
代码运行时按Ctrl-C,无论是%run或长时间运行命令,都会导致KeyboardInterrupt。这会导致几乎所有Python程序立即停止,除非一些特殊情况。
警告:当Python代码调用了一些编译的扩展模块,按Ctrl-C不一定将执行的程序立即停止。在这种情况下,你必须等待,直到控制返回Python解释器,或者更糟糕的情况下强制终止Python进程。
- 从剪切板执行程序
若使用Jupyter notebook,可以将代码复制粘贴到任意代码格执行。在IPython shell中也可以从剪贴板执行。假设在其它应用中复制了如下代码:
最简单的方法是使用%paste和%cpaste函数。%paste可以直接运行剪贴板中的代码:
%cpaste功能类似,但会给出一条提示:
使用%cpaste可以粘贴任意多的代码再运行。若粘贴了错误代码,可以用Ctrl-C中断。
- 键盘快捷键
IPython有许多键盘快捷键进行导航提示(类似Emacs文本编辑器或UNIX bash Shell)和交互shell的历史命令。
- 魔术命令
IPython中特殊的命令(Python中没有)被称作“魔术”命令。这些命令可以使普通人物更便捷,更容易控制IPython系统。魔术命令是在指令前添加百分号%前缀。例如,可以用%timeit测量任何Python语句,例如矩阵乘法的执行时间:
魔术命令可以被看做IPython中运行的命令行。许多魔术命令有“命令行”选项,可以通过?查看。
魔术函数默认可以不用百分号,只要没有变量和函数名相同。这个特点被称为“自动魔术”,可以用%automagic打开或关闭。
一些魔术函数与Python函数很像,它的结果可以赋值给一个变量:
- 集成Matplotlib
在IPython shell中,运行%matplotlib可以进行设置,可以创建多个绘图窗口,而不会干扰控制台session:
在JUpyter中,命令有所不同: