目录
IPython 是 Python 的在交互式界面上的升级版,可以直接在命令行中输入 ipython
或 ipython3
使用(要提前下载好 IPython 的库),也可以使用 jupyter notebook
指令运行 Jupyter Notebook 并以 IPython 为内核进行使用。
IPython 与 Python 在命令上的不同在于添加了几个方便的语法和函数,其中 !
和 ?
是新添加的语法,%<command>
则可以调用 IPython 内置的、加强交互的函数。
本文参考自 https://ipython.readthedocs.io/en/stable/interactive/python-ipython-diff.html。
使用感叹号 !
运行 Shell 命令
使用感叹号可以使你在运行 IPython 的 Shell 上运行一些命令,并获取这些命令的输出。
使用一个感叹号 !
运行
用实例来说明,试着运行命令吧。因为我使用的是 cmd 作为底层 Shell,所以也只能运行 cmd 的指令。
!copy nul a.txt # 创建文件
!dir /b
那么就获得了在 cmd 下运行指令的输出。
赋值
这些输出可以赋值给变量,比如
a = !dir /b
a
切记不能写成 a = !dir /b; a
的形式,因为 !
之后都是 Shell 命令的成分,Python 的语法自然是不适用的。
编码
还要注意编码问题,如果 Shell 和 IPython 使用的编码是不同的,那么就有可能产生编码问题,比如
因为 ls
命令在 cmd 环境下是不存在的,所以会保存,不过由于 cmd 使用的是 GB2312 编码,IPython 使用的是 UTF-8 编码,所以会产生乱码。
这时候如果强行转码是不行的,因为编码在已经被破坏了,非要这么做的话只会得到一个结果,那就是熟悉的“锟斤拷”。
最方便的方法就是改变 Shell 的编码,可以在 cmd 的设置选项中设置 cmd 的编码,也可以使用 chcp
切页命令临时改变编码。
使用两个感叹号 !!
运行
使用 !!
而不是 !
的区别在于它们输出的形式:
!
输出的是这些命令原本的输出形式,也就是在 Shell 中运行的样子;而 !!
则会将输出转变成内置的、包含字符串的列表的形式,这与赋值给变量的样子是一样的。
编码
同样可能出现编码不一致导致的错误,解决方法同上。
赋值
!!
与 !
同样可以赋值给变量,如果没有编码问题的话,两者没什么不同。
注意
注意有一些命令是不可以使用的,比如 cd
转移工作目录指令,如果你想转移工作目录的话,应该使用 %
开头的内置函数。一般来说,在你错误地使用这些命令的时候,IPython 会提示错误,并告诉你应该怎么做。
!cd test # Error
%cd test # Ok
使用问号 ?
获取帮助
如果恰好忘记了某个库、类、函数、或者它的使用方法,那么可以使用 ?
来获取帮助。这个方法的本质是获取注释信息。
关于注释的使用可以参考我以前的文章 Python 注释,因为可以在库、类、函数上添加注释,自然也可以使用 ?
获得库、类、函数上的帮助。
使用一个问号 ?
单独的一个问号可以获得 IPython 本身的帮助。
对于自己写的库、类、函数也是可以的,可以获得自己写的注释信息。
使用两个问号 ??
使用 ??
会比 ?
尝试获得更多信息。如果说 ?
提取的是注释的话,那么 ??
就会尝试将源码给你拿出来。
使用 *
做模糊查询
加上 *
后使用 ?
会寻找类、函数。这个时候就不要使用 ??
了,如果使用 ??
就不是模糊查询了。