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通过“!”调用系统命令,如“!uptime”;
(5) 其他ipython有很多magic函数,可通过使用%lsmagic枚举;
%run:运行python文件
%edit:使用编辑器打开当前函数编辑
%save:把某些历史记录保存到文件
%debug:激活debug程序
(6)ipython有很多快捷键
(7)ipython的扩展宏系统、storemagic持久化宏、变量、别名;以及autoreload自动重载等功能;
ipython相较于原生的python,提供了更加强大的内省功能,所谓内省,也称之为内视,即 object introspection,主要有以下一些常见的方法:
object? 或者?object :显示该对象的一些通用信息,注意python里面一切皆对象哦,包括函数、类。
object?? 或者??object:两个问号显示详细信息,如果是类或者是函数,还会显示源代码。即将问号放在前面和后面都可以。
通配符*匹配:如
numpy.*load*? 这会显示所有的包含有load的函数
numpy.*sort? 这会显示所有以sort结尾的函数
下面介绍一下第一个和第二个快捷键,比如有如下代码:
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或者是向下的方向键,则正好相反。
什么是ipython的魔法命令 magic command?
所谓的模式命令,是指那些给我们提供方便,轻松控制ipython交互系统的命令,可以这样去理解,魔术命令可以看成是ipython交互环境下面的命令行程序,其中很多还有一些命令行参数选项。
%quickref :可以显示ipython的快速参考
%magic :可以查看到底有哪些模式命令(这个方法会显示每一个命令的详细信息,因此会很多)
%lsmagic :这里只会显示模式命令的名字,会比较简洁,查看起来更方便
%命令? 或者是%命令??:当我们想要查看某一命令的详细信息,我们可以使用同前面类似的方法,在魔术命令后面添加一个或者是两个问号??来查看详细信息。
默认情况下,魔术命令总是以百分号%开头,但这不是必须的,我们也可以不使用百分号,我们也可以直接使用不带百分号的魔术命令,这称之为“自动魔术命令——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之间的互相切换
在ipython交互情况下,直接输入命令 !cmd 即可进入cmd模式
在cmd模式下直接输入 ipython 可以再次回到 ipython模式
1、打开命令行窗口,运行pip install ipython,安装ipython;
2、运行ipython,进入ipython窗口;
3、命令前加叹号,可在当前窗口执行系统命令,如!ipconfig /all;
4、按Tab键补全命令;
In [1]: a=[1,2,3]
In [2]: a.按tab键
a.append a.count a.insert a.reverse
a.clear a.extend a.pop a.sort
a.copy a.index a.remove
5、运用*和?进行模糊查询,如
In [1]: a=[1,2,3]
In [2]: a.*pp*?
a.append
6、运用?查询对象信息,如
In [3]: a?
Type: list
String form: [1, 2, 3]
Length: 3
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
7、运用??查询函数代码,如
In [4]: def run():
...: print('hello world')
...:
In [5]: run??
Signature: run()
Docstring: <no docstring>
File: c:\users\陈全应\<ipython-input-4-b9ff523fa58d>
Type: function
8、其他快捷键
9、魔术命令%,如%paste,可以将其他地方的代码直接粘贴在这里,这个功能适合程序局部调试;如%run new.py,可以运行new.py文件;如%timeit a+b,计算a+b运行时间,系统会计算很多次然后求平均;如%pdb on,打开调试模式,如果程序出现异常,系统会停在出现异常的前一行,这时我们可以运行pdb命令查找异常原因,如 p a,打印a变量;如%pdb off,关闭调试模式;
10、运用_查询前面某条语句的输出结果,如_3,输出第3条语句的输出结果,运用_i查询前面某条语句的内容,如_i3,输出第3条语句的内容;