史上最详细、最完全的ipython使用教程,Python使用者必备!
一、ipython簡(jiǎn)介
關(guān)于什么是ipython,本文就不加以介紹了,他是一個(gè)非常流行的python解釋器,相比于原生的python解釋器,有太多優(yōu)點(diǎn)和長(zhǎng)處,因此幾乎是python開發(fā)人員的必知必會(huì)。
1、ipython相比于原生的python有什么優(yōu)勢(shì)
(1) python shell不能在退出保存歷史;ipython歷史記錄自動(dòng)保存:保存在history.sqlite文件下:可用“_”、“__”、“___”調(diào)用最近三次記錄;
(2) python shell不支持tab自動(dòng)補(bǔ)全;ipython支持tab補(bǔ)全;
(3) python shell不能快速獲取類、函數(shù)信息;ipython通過“?”顯示對(duì)象簽名、文檔字符串、代碼位置,通過“??”顯示源代碼;(4) python shell不能直接執(zhí)行shell命令,需要借助sys;ipython通過“!”調(diào)用系統(tǒng)命令,如“!uptime”;
(5) 其他ipython有很多magic函數(shù),可通過使用%lsmagic枚舉;
???? %run:運(yùn)行python文件
???? %edit:使用編輯器打開當(dāng)前函數(shù)編輯
???? %save:把某些歷史記錄保存到文件
???? %debug:激活debug程序
???? 等等,后面會(huì)講到
(6)ipython有很多快捷鍵
(7)ipython的擴(kuò)展宏系統(tǒng)、storemagic持久化宏、變量、別名;以及autoreload自動(dòng)重載等功能;
下面挑選幾個(gè)典型的加以說明:
(1)Python對(duì)象在ipython環(huán)境下排版得更好,格式化更加美觀。比如對(duì)于一個(gè)字典類型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下顯示的結(jié)果,很不美觀, 因?yàn)楫?dāng)字典很長(zhǎng)的時(shí)候,很難看。
??? 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)提供更強(qiáng)大的交互體驗(yàn)
我們都知道,在python原生開發(fā)條件下,單下劃線“_”表示的是最近的一個(gè)輸出結(jié)果,但是ipython則在此基礎(chǔ)之上做出了更強(qiáng)大的功能。因?yàn)樵鶳ython編輯器不僅丑,而且是沒有行號(hào)的,但是ipython提供了行號(hào),這不僅更好看,而且有很多妙用哦,如下:
_ :表示最近的一個(gè)輸出結(jié)果;
__ :表示最近的兩個(gè)輸出結(jié)果;
_行號(hào) :查看指定行的那個(gè)變量的結(jié)果
_i行號(hào):查看指定行號(hào)輸入的變量名稱
示例如下:
??? 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
_
這時(shí)會(huì)報(bào)錯(cuò)的,因?yàn)開和__針對(duì)的是最近一個(gè)和最近兩個(gè)輸出了的,沒有輸出就不行了。
??? In [9]: _4
??? Out[9]: 200
??? ?
??? In [10]: _i3
??? Out[10]: 'b=200'
??? ?
??? In [11]: _i4
??? Out[11]: 'b'
注意:
(a)_4 表示的是查看第四行輸出的變量,但是這里如果改為_3 就不行了,因?yàn)榈谌兄x了b=200,并沒有輸出,所以
_行號(hào) 只能夠用在輸出的行號(hào)上面。
? (b) 但是? _i行號(hào),不管是用在輸出還是輸入上面都是沒有問題的。
如何判斷是輸出還是輸入?前面是In的表示輸入,是Out表示輸出。
二、ipython的內(nèi)省
ipython相較于原生的python,提供了更加強(qiáng)大的內(nèi)省功能,所謂內(nèi)省,也稱之為內(nèi)視,即 object introspection,主要有以下一些常見的方法:
object? 或者?object :顯示該對(duì)象的一些通用信息,注意python里面一切皆對(duì)象哦,包括函數(shù)、類。
object?? 或者??object:兩個(gè)問號(hào)顯示詳細(xì)信息,如果是類或者是函數(shù),還會(huì)顯示源代碼。即將問號(hào)放在前面和后面都可以。
通配符*匹配:如
numpy.*load*? 這會(huì)顯示所有的包含有l(wèi)oad的函數(shù)
numpy.*sort? 這會(huì)顯示所有以sort結(jié)尾的函數(shù)
三、ipython快捷鍵
下面介紹一下第一個(gè)和第二個(gè)快捷鍵,比如有如下代碼:
??? Ctrl-P??? 或上箭頭鍵 后向搜索命令歷史中以當(dāng)前輸入的文本開頭的命令
??? Ctrl-N?? 或下箭頭鍵 前向搜索命令歷史中以當(dāng)前輸入的文本開頭的命令
??? Ctrl-R?? 按行讀取的反向歷史搜索(部分匹配)
??? Ctrl-Shift-v?? 從剪貼板粘貼文本
??? Ctrl-C?? 中止當(dāng)前正在執(zhí)行的代碼
??? Ctrl-A?? 將光標(biāo)移動(dòng)到行首
??? Ctrl-E?? 將光標(biāo)移動(dòng)到行尾
??? Ctrl-K?? 刪除從光標(biāo)開始至行尾的文本
??? Ctrl-U?? 清除當(dāng)前行的所有文本譯注12
??? Ctrl-F?? 將光標(biāo)向前移動(dòng)一個(gè)字符
??? Ctrl-b?? 將光標(biāo)向后移動(dòng)一個(gè)字符
??? 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
當(dāng)輸入a之后,然后按Ctrl+P,或者是按向上的方向鍵,則會(huì)依次顯示已a(bǔ)開頭的變量,依次是a、abcd、abc、a,不僅如此,很久之前在ipython里面輸入過的變量,只要是以a開頭的,都能夠顯示,知道最開始的那個(gè)以a開頭的位置,如果是Ctrl+N或者是向下的方向鍵,則正好相反。
四、魔術(shù)命令——magic command
什么是ipython的魔法命令?
所謂的模式命令,是指那些給我們提供方便,輕松控制ipython交互系統(tǒng)的命令,可以這樣去理解,魔術(shù)命令可以看成是ipython交互環(huán)境下面的命令行程序,其中很多還有一些命令行參數(shù)選項(xiàng)。
%quickref? :可以顯示ipython的快速參考
%magic? :可以查看到底有哪些模式命令(這個(gè)方法會(huì)顯示每一個(gè)命令的詳細(xì)信息,因此會(huì)很多)
%lsmagic :這里只會(huì)顯示模式命令的名字,會(huì)比較簡(jiǎn)潔,查看起來更方便
%命令? 或者是%命令??:當(dāng)我們想要查看某一命令的詳細(xì)信息,我們可以使用同前面類似的方法,在魔術(shù)命令后面添加一個(gè)或者是兩個(gè)問號(hào)??來查看詳細(xì)信息。
默認(rèn)情況下,魔術(shù)命令總是以百分號(hào)%開頭,但這不是必須的,我們也可以不使用百分號(hào),我們也可以直接使用不帶百分號(hào)的魔術(shù)命令,這稱之為“自動(dòng)魔術(shù)命令——automagic”如:
magic 這會(huì)得到和 %magic一樣的效果,但是需要注意的是,不使用百分號(hào)時(shí),不能出現(xiàn)和魔術(shù)命令同名稱的變量,否則顯示的就是變量了。那到底是使用百分號(hào)還是不使用百分號(hào)呢?事實(shí)上,我們也是可以自由控制的,通過%automagic來控制,
默認(rèn)情況下,它是開啟的,即我們可以使用無%的魔術(shù)命令,只要與變量名不沖突即可,我么也可以關(guān)閉,如下:
??? %automagic -off 0
??? ?
??? Automagic is OFF, % prefix IS needed for line magics.
此時(shí),再次輸入magic命令時(shí),顯示:
??? magic
??? ---------------------------------------------------------------------------
??? NameError???????????????????????????????? Traceback (most recent call last)
??? ~\Desktop\test.py in <module>()
??? ----> 1 magic
??? ?
??? NameError: name 'magic' is not defined
?顯示magic是不存在的,因?yàn)橐呀?jīng)關(guān)閉了。此時(shí)必須使用%開頭
如何控制它的開還是關(guān)閉呢?
?%automagic - on, 1?? #此時(shí)打開
?%automagic - off, 0?? #此時(shí)關(guān)閉
下面介紹一些常見的魔術(shù)命令。
1、%run——運(yùn)行一個(gè)Python腳本
即在ipython中我不僅可以運(yùn)行代碼,我還可以運(yùn)行一個(gè)已知的python腳本文件,就像是在命令行中的使用是一樣的,比如有一個(gè)以下的Python文件:
??? def addfunc(a,b,c):
??????? return a+b-c
??? ?
??? a=100
??? b=200
??? c=150
??? result=addfunc(a,b,c)
現(xiàn)在我們?cè)趇python里面輸入如下代碼:
??? 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
我們發(fā)現(xiàn),腳本文件里面的變量,我們依然可以使用,一般格式如下:
%run C:\Users\XinAir\Desktop\test.py 命令行參數(shù)(如果有命令的話)
這個(gè)和cmd模式之下的
python C:\Users\XinAir\Desktop\test.py 命令行參數(shù)(如果有命令的話) 兩者是不是異曲同工。
不僅如此,我不僅能夠直接使用腳本文件里面的代碼,腳本文件也可以使用ipython環(huán)境中的變量,如下:
??? 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
我們發(fā)現(xiàn),不僅可以直接使用腳本文件中的變量、函數(shù),還可以給腳本文件使用ipython本身的變量,除此之外,我還可以使用下面語句:
%run -i C:\Users\XinAir\Desktop\test.py??? 這個(gè)地方的-i是可選參數(shù),可以要,也可不要代表的就是interactive(交互)的意思。
2、%paste或者是%cpaste——執(zhí)行剪切板中的代碼
很多人可能覺得之好像沒什么用,實(shí)際上,它的用處非常大,我們?cè)诰帉懘a的時(shí)候,我們希望執(zhí)行某一小段代碼進(jìn)行相關(guān)的測(cè)試,但是我們又不想專門再建立一個(gè)py文件,所以我們可以將代碼復(fù)制或者是剪切一下,這個(gè)時(shí)候代碼進(jìn)入了剪切板,然后打開ipython,此時(shí)我們有三種處理辦法
第一:直接使用Ctrl+V進(jìn)行粘貼,然后測(cè)試代碼
第二:輸入魔術(shù)命令%paste,回車,這個(gè)時(shí)候在剪切板中的代碼自動(dòng)粘貼了進(jìn)來,不再需要手動(dòng)Ctrl+V了
第三:輸入魔術(shù)命令%cpaste,回車,然后再手動(dòng)Ctrl+V,將代碼復(fù)制進(jìn)來,注意最后一定要按兩個(gè)減號(hào)“--”退出才行哦,實(shí)際上它給了提示的。如下
??? %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 檢測(cè)任意Python語句的執(zhí)行時(shí)間
??? 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)
注意,執(zhí)行的語句要和%timeit放在同一行,%timeit python語句
%time指一次執(zhí)行代碼的總體時(shí)間
%tinmeit指多次執(zhí)行代碼的平均時(shí)間,使用這個(gè)命令是因?yàn)槊看螆?zhí)行同一個(gè)代碼的時(shí)間是不一樣的,所以通過多次執(zhí)行代碼求出的平均時(shí)間更能說明代碼的總體執(zhí)行時(shí)間
4、%who和%who_ls和%whos——查看當(dāng)前interactive環(huán)境中的變量
他們都可以查看當(dāng)前的ipython環(huán)境中有哪些變量,但有所區(qū)別
%who :依次顯示出每一個(gè)變量的名稱
%who_ls:以列表的形式返回
%whos:顯示出每一個(gè)變量的詳細(xì)信息
??? 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環(huán)境中的變量
%xdel variable 刪除單個(gè)變量的引用
%reset指刪除interactive命名空間中全部的變量名
7、其他常用魔術(shù)命令
%debug 從最新的異常跟蹤的底部進(jìn)入交互式調(diào)試器
%pdb 在異常發(fā)生后自動(dòng)進(jìn)入調(diào)試器
%page OBJECT 通過分頁器打印輸出object
%prun statement 通過cprofile執(zhí)行statement,并打印分析器的輸出結(jié)果
當(dāng)然,魔術(shù)命令有很多,沒有完全列舉出,可以自己查看,后面的博文中也還會(huì)接觸到。
?
8、ipython開發(fā)環(huán)境與cmd之間的互相切換
在ipython交互情況下,直接輸入命令 !cmd 即可進(jìn)入cmd模式
在cmd模式下直接輸入 ipython 可以再次回到 ipython模式
總結(jié)
以上是生活随笔為你收集整理的史上最详细、最完全的ipython使用教程,Python使用者必备!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 报错:SyntaxError: Non-
- 下一篇: python ctypes库5_如何传递