Ipython

    xiaoxiao2026-06-20  5

    来源:http://blog.kochiya.me/www/posts/Ipython!.html

    前几天偶然在公司内网上拖了一本 Learning IPython for Interactive Computing and Data Visualizatio,如名字所说,这本书主体内容就是讨论ipython的使用与数据的可视化。由于很薄,昨天为了打发时间就随便翻了翻,阅读完了前三章,认识到一个问题:我从来没有真正使用过ipython —- 之前只是很单纯地把ipython看作一个支持自动补全和缩进的交互shell,直到真正阅读了ipython的文档,才发现这样的认知相当无礼。

    这篇笔记基本是以上文所提及到的书前两章和官方文案为主要参考资料,如果希望更深入学习,请务必参看。官方文案附于此:文档,书的话,我没有搜索过,不过应该是有pdf版本流于网上的,如果实在找不到的话,我也可以上传一份。

    本文不会涉及到安装步骤,并且也假设读者理解特定术语(比如内省,profile)的意义。

    初步

    一旦您进入了ipython,ipython会提示您键入下面四个命令之一去试着使用ipython:

    命令名说明?ipython特性的介绍和概述%quickref一份手册,包含了所有的命令helppython的帮助系统object?关于object的详细信息,如果键入object??会更详细

    Ok,我们从这里开始,当然,首先是推荐您看一下quickref的。您注意到了,这个命令以%开头。所有以%开头的方法,都是所谓的魔术方法(Magic function),也就是ipython内置的一些方法。需要注意的是,魔术方法有%和%%之分,比如%timeit和%%timeit。这玩意在ipython中有专门的叫法,前者叫line magic后者叫cell magic。顾名思义,前者是专门针对一行的命令,后者针对多行的命令(这是notebook中的术语,关于notebook请参阅最后),如是而已。

    所有的魔术方法都可以查看源码,仔细阅读的话,对自己写代码也很有裨益,具体方法是在魔术方法后面加??,譬如%timeit??。代码是经过高亮和格式化的,应该很容易阅读才是。如果您有着奇妙的好奇心的话,想必刚才也尝试过%timeit?。区别是,这次没有源码出现对吧。但是其他信息,比如type什么的指导性内容会显示出来。

    魔术方法会在下文专门一节来讨论,这里有个印象即可。

    接下来说说?。

    ?其实上面已经有所涉及,总之您知道了可以用?修饰魔术方法获取更详细的信息。但是不只是这样,?其实是可以修饰python所有的对象。考虑到python中一切都是对象,所以您知道了,?事实上可以查看一切的变量(这里强调了是变量了,所以 1? 这样为什么会报错……恩哼?)。

    尝试一下输入下面的代码,您会有更深入的了解。

    In [1]: a = [1,2,3,4] In [2]: a? In [3]: list? In [4]: import os In [5]: os? In [6]: os.open? In [7]: super?

    以上分别代表了变量,类,包,类中方法,内置函数,如您所见,均工作良好。把?替换为??,一般来说会得到更详尽的信息,,不过?通常就够了(对我而言)。另外,?其实作为前缀和作为后缀效果是相同的,只不过我更习惯放在后面而已。

    上面的内容就是ipython最基础的部分,请务必熟悉。

    魔术方法

    ipython一个很(最)重要特性就是魔术方法,不过内置的魔术方法实在太多了点(试试使用%lsmagic看所有的魔术方法),这篇笔记当然不可能详述所有的魔术方法,这里会挑一些常用的来说,权作抛砖引玉。

    pwd

    如果您仔细看过前文,您会发现这个命令没有%,但是这个确实也是一个魔术方法,原因是,其实pwd这个命令只是一个链接,指向的是%pwd方法,%pwd指向系统的命令。当然这个命令含义很明显,就是打印当前路径。ipython把一些linux下常用的bash命令做了类似的处理,使用起来相当方便。我试了一下,大致有pwd,cd,whos,history,rm,ll,ls,mv,cp,alias,mkdir。

    !xxx

    ipython虽然对不少常用命令做了封装,但是毕竟不会很多,比如突然希望执行vim或者top之类的linux命令,难道还需要切出去不成?其实不需要,因为ipython提供了一个额外的!语法去直接执行linux命令。比如,我需要执行top命令,那么在ipython中,只要这么写就好!top。

    更复杂的linux命令也是支持的,事实上,只要加上!,您完全可以把ipython当作bash来用。

    而且,还可以赋值,比如这样:

    files = !ls -1 -S | grep hello

    转载请注明原文地址: https://yun.8miu.com/read-148200.html
    最新回复(0)