python开发者必备,史上最详细的 ipython 教程——第一篇
送你小心心记得关注我哦!!
进入正文
ipython到底有什么用,可能很多小伙伴平时都是在用集成的IDE编写代码,比如pycharm等,但是ipython实际上是python最有力的武器,在数据分析科学、数据挖掘等领域有着不可替代的作用。但是很少有系统性的ipython教程,大多是零散分散的一些教程,小编进过悉心整理,决定出一期ipython详细教程,本文是第一期,后面会继续跟进,欢迎继续关注。本文较长,阅读时间约30min。
01
ipython简介
关于什么是ipython,本文就不加以介绍了,他是一个非常流行的python解释器,相比于原生的python解释器,有太多优点和长处,因此几乎是python开发人员的必知必会。
(1) python shell不能在退出保存历史;ipython历史记录自动保存:保存在history.sqlite文件下:可用“_”、“__”、“___”调用最近三次记录;
(2) python shell不支持tab自动补全;ipython支持tab补全;
(3) python shell不能快速获取类、函数信息;ipython通过“?”显示对象签名、文档字符串、代码位置,通过“??”显示源代码;(4) python shell不能直接执行shell命令,需要借助sys;ipython通过“!”调用系统命令,如“!
(5) 其他ipython有很多magic函数,可通过使用%lsmagic枚举;
%run:运行python文件
%edit:使用编辑器打开当前函数编辑
%save:把某些历史记录保存到文件
%debug:激活debug程序
等等,后面会讲到
(6)ipython有很多快捷键
(7)ipython的扩展宏系统、storemagic持久化宏、变量、别名;以及autoreload自动重载等功能;
下面挑选几个典型的加以说明:
(1)Python对象在ipython环境下排版得更好,格式化更加美观。比如对于一个字典类型data。
>>> import numpy as np
>>> data={i:np.random.randn() for i in range(8)}
>>> data
{0: 0.5745972896627615, 1: 0.888451102340561, 2: -2.2941687621316924, 3: 0.01790118639622907, 4: 0.3600199138099036, 5: 0.6118078188322031, 6: 0.5261552735725278, 7: -0.20874867962524404}
这是原生python下显示的结果,很不美观, 因为当字典很长的时候,很难看。
data={i:np.random.randn() for i in range(8)}
In [13]: data
Out[13]:
{0: -0.24691306010199965,
1: 1.0770180986231184,
2: 0.9459463985248865,
3: 0.7618376828038825,
4: 1.6075756654719342,
5: -0.04417798701828061,
6: -1.062961626712148,
7: -0.7381927912455305}
这是ipython下的输出格式,可以看见,字典排列的很美观,非常易于查看。
(2)提供更强大的交互体验
我们都知道,在python原生开发条件下,单下划线“_”表示的是最近的一个输出结果,但是ipython则在此基础之上做出了更强大的功能。因为原生Python编辑器不仅丑,而且是没有行号的,但是ipython提供了行号,这不仅更好看,而且有很多妙用哦,如下:
_ :表示最近的一个输出结果;
__ :表示最近的两个输出结果;
_行号 :查看指定行的那个变量的结果
_i行号:查看指定行号输入的变量名称
In [1]: a=100
In [2]: a
Out[2]: 100
In [3]: b=200
In [4]: b
Out[4]: 200
In [5]: _
Out[5]: 200
In [6]: __
Out[6]: 200
注意:这里一定要输出a、b,也就是说,如果上面没有第二行和第四行,那是不行的,像下面这样
a=100
_
这时会报错的,因为_和__针对的是最近一个和最近两个输出了的,没有输出就不行了。
In [9]: _4
Out[9]: 200
In [10]: _i3
Out[10]: 'b=200'
In [11]: _i4
Out[11]: 'b'
注意:
(a)_4 表示的是查看第四行输出的变量,但是这里如果改为_3 就不行了,因为第三行之定义了b=200,并没有输出,所以
_行号 只能够用在输出的行号上面。
(b) 但是 _i行号,不管是用在输出还是输入上面都是没有问题的。
如何判断是输出还是输入?前面是In的表示输入,是Out表示输出。
02
ipython的内省
ipython相较于原生的python,提供了更加强大的内省功能,所谓内省,也称之为内视,即 object introspection,主要有以下一些常见的方法:
object? 或者?object :显示该对象的一些通用信息,注意python里面一切皆对象哦,包括函数、类。
object?? 或者??object:两个问号显示详细信息,如果是类或者是函数,还会显示源代码。即将问号放在前面和后面都可以。
通配符*匹配:如
numpy.*load*? 这会显示所有的包含有load的函数
numpy.*sort? 这会显示所有以sort结尾的函数
03
ipython的快捷键
ipython其实完全可以看成是一个集成的开发环境了,相较于原生的python编辑环境,有着众多实用的快捷键操作。下面介绍一下第一个和第二个快捷键,比如有如下所示:
Ctrl-P 或上箭头键 后向搜索命令历史中以当前输入的文 本开头的命令
Ctrl-N 或下箭头键 前向搜索命令历史中以当前输入的文 本开头的命令
Ctrl-R 按行读取的反向历史搜索(部分匹配)
Ctrl-Shift-v 从剪贴板粘贴文本
Ctrl-C 中止当前正在执行的代码
Ctrl-A 将光标移动到行首
Ctrl-E 将光标移动到行尾
Ctrl-K 删除从光标开始至行尾的文本
Ctrl-U 清除当前行的所有文本译注12
Ctrl-F 将光标向前移动一个字符
Ctrl-b 将光标向后移动一个字符
Ctrl-L 清屏
下面以第一个为例加以演示
In [16]: a=100
In [17]: a
Out[17]: 100
In [18]: abc=100
In [19]: abcd=1000
In [20]: a=100
In [21]: a
当输入a之后,然后按Ctrl+P,或者是按向上的方向键,则会依次显示已a开头的变量,依次是a、abcd、abc、a,不仅如此,很久之前在ipython里面输入过的变量,只要是以a开头的,都能够显示,知道最开始的那个以a开头的位置,如果是Ctrl+N或者是向下的方向键,则正好相反。
04
ipython的魔术命令
什么是ipython的魔法命令?
魔术命令是ipython提供的最为强大的武器,所谓的魔术命令,是指那些给我们提供方便,轻松控制ipython交互系统的命令,可以这样去理解,魔术命令可以看成是ipython交互环境下面的命令行程序,其中很多还有一些命令行参数选项。
%quickref :可以显示ipython的快速参考
%magic :可以查看到底有哪些模式命令(这个方法会显示每一个命令的详细信息,因此会很多)
%lsmagic :这里只会显示模式命令的名字,会比较简洁,查看起来更方便
%命令? 或者是%命令??:当我们想要查看某一命令的详细信息,我们可以使用同前面类似的方法,在魔术命令后面添加一个或者是两个问号??来查看详细信息。
自动魔术命令——automagic
默认情况下,魔术命令总是以百分号%开头,但这不是必须的,我们也可以不使用百分号,我们也可以直接使用不带百分号的魔术命令,这称之为“自动魔术命令——automagic”如:
magic 这会得到和 %magic一样的效果,但是需要注意的是,不使用百分号时,不能出现和魔术命令同名称的变量,否则显示的就是变量了。那到底是使用百分号还是不使用百分号呢?事实上,我们也是可以自由控制的,通过%automagic来控制,
默认情况下,它是开启的,即我们可以使用无%的魔术命令,只要与变量名不冲突即可,我么也可以关闭,如下:
%automagic -off 0
Automagic is OFF, % prefix IS needed for line magics.
此时,再次输入magic命令时,显示:
magic
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
~\Desktop\test.py in <module>()
----> 1 magic
NameError: name 'magic' is not defined
显示magic是不存在的,因为已经关闭了。此时必须使用%开头
如何控制它的开还是关闭呢?
%automagic - on, 1 #此时打开
%automagic - off, 0 #此时关闭
下面介绍一些常见的魔术命令。
1、%run——运行一个Python脚本
即在ipython中我不仅可以运行代码,我还可以运行一个已知的python脚本文件,就像是在命令行中的使用是一样的,比如有一个以下的Python文件:
def addfunc(a,b,c):
return a+b-c
a=100
b=200
c=150
result=addfunc(a,b,c)
现在我们在ipython里面输入如下代码:
In [21]: %run C:\Users\XinAir\Desktop\test.py
In [22]: a
Out[22]: 100
In [23]: b
Out[23]: 200
In [24]: c
Out[24]: 150
In [25]: result
Out[25]: 150
我们发现,脚本文件里面的变量,我们依然可以使用,一般格式如下:
%run C:\Users\XinAir\Desktop\test.py 命令行参数(如果有命令的话)
这个和cmd模式之下的
python C:\Users\XinAir\Desktop\test.py 命令行参数(如果有命令的话) 两者是不是异曲同工。
不仅如此,我不仅能够直接使用脚本文件里面的代码,脚本文件也可以使用ipython环境中的变量,如下:
In [26]: %run C:\Users\XinAir\Desktop\test.py
In [27]: x=1000
In [28]: y=2000
In [29]: z=1500
In [30]: result=addfunc(x,y,z)
In [31]: result
Out[31]: 1500
我们发现,不仅可以直接使用脚本文件中的变量、函数,还可以给脚本文件使用ipython本身的变量,除此之外,我还可以使用下面语句:
%run -i C:\Users\XinAir\Desktop\test.py 这个地方的-i是可选参数,可以要,也可不要代表的就是interactive(交互)的意思。
2、%paste或者是%cpaste——
执行剪切板中的代码
很多人可能觉得之好像没什么用,实际上,它的用处非常大,我们在编写代码的时候,我们希望执行某一小段代码进行相关的测试,但是我们又不想专门再建立一个py文件,所以我们可以将代码复制或者是剪切一下,这个时候代码进入了剪切板,然后打开ipython,此时我们有三种处理办法
第一:直接使用Ctrl+V进行粘贴,然后测试代码
第二:输入魔术命令%paste,回车,这个时候在剪切板中的代码自动粘贴了进来,不再需要手动Ctrl+V了
第三:输入魔术命令%cpaste,回车,然后再手动Ctrl+V,将代码复制进来,注意最后一定要按两个减号“--”退出才行哦,实际上它给了提示的。如下
%cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:x=5
:y=7
:if x>5:
: x+=1
:
: y=8
:--
In [54]: y
Out[54]: 7
In [55]: x
Out[55]: 5
3、%timeit 和%time 检测任意Python语句
的执行时间
a=numpy.random.randn(100,100)
In [65]: %timeit numpy.dot(a,a)
70.8 µs ± 1.74 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
注意,执行的语句要和%timeit放在同一行,%timeit python语句
%time指一次执行代码的总体时间
%tinmeit指多次执行代码的平均时间,使用这个命令是因为每次执行同一个代码的时间是不一样的,所以通过多次执行代码求出的平均时间更能说明代码的总体执行时间
4、%who和%who_ls和%whos——查看当前interactive环境中的变量
他们都可以查看当前的ipython环境中有哪些变量,但有所区别
%who :依次显示出每一个变量的名称
%who_ls:以列表的形式返回
%whos:显示出每一个变量的详细信息
In [5]: %who
a b c
In [6]: %who_ls
Out[6]: ['a', 'b', 'c']
In [7]: %whos
Variable Type Data/Info
----------------------------
a int 100
b int 200
c int 300
5、%hist——查看历史命令
In [11]: %hist
magic
a=100
b=200
c=300
%who
%who_Is
%who_is
%who_ls
%whos
%hist
6、删除ipython环境中的变量
%xdel variable 删除单个变量的引用
%reset 指删除interactive命名空间中全部的变量名
7、其他常用魔术命令
%debug 从最新的异常跟踪的底部进入交互式调试器
%pdb 在异常发生后自动进入调试器
%page OBJECT 通过分页器打印输出object
%prun statement 通过cprofile执行statement,并打印分析器的输出结果
当然,魔术命令有很多,没有完全列举出,可以自己查看,后面的博文中也还会接触到。
8、ipython开发环境与cmd之间的互相切换
(1)在ipython交互情况下,直接输入命令 !cmd 即可进入cmd模式
(2)在cmd模式下直接输入 ipython 可以再次回到 ipython模式
后面会继续深入讲解ipython的高级用法,请关注!