IPython的使用大全

安裝IPython

pip install ipython
ipython #啟動

或者使用ipython notebook

jupyter notebook#啟動

在IPython里查看幫助文檔

簡單的說逻翁,有三種方法
使用 help 函數(shù)可以查看函數(shù)描述
使用 ? 可以查看函數(shù)洪鸭,對象等的描述和用法
使用 ?? 可以在佳头?的基礎(chǔ)上追加源碼娄柳,前提是該函數(shù)是由python語言編寫的争拐。
使用TAB可以對命令進(jìn)行補(bǔ)全
如果并不知道首字符搀罢,只知道中間的匹配項(xiàng)蝗岖,也可以使用*來做匹配.

In [1]: help(len)
In [2]: len?
In [3]: len??
In [4]: import h<TAB>
hashlib             hmac                http         
heapq               html                husl  
In [5]: *Warning?
BytesWarning                  RuntimeWarning
DeprecationWarning            SyntaxWarning
FutureWarning                 UnicodeWarning
ImportWarning                 UserWarning
PendingDeprecationWarning     Warning
ResourceWarning

在IPython的一些快捷鍵

Keystroke Action
Ctrl-a 光標(biāo)回到行首
Ctrl-e 光標(biāo)回到行末
Ctrl-b or the left arrow key 光標(biāo)后移一位
Ctrl-f or the right arrow key 光標(biāo)前移一位
------------------------------- --------------------------------------------------
Backspace key Delete previous character in line
Ctrl-d 刪除光標(biāo)后的字符
Ctrl-k 剪切光標(biāo)后的字符
Ctrl-u 剪切光標(biāo)前的字符
------------------------------- --------------------------------------------
Ctrl-l 清除屏幕
Ctrl-c 中止命令
Ctrl-d 退出ipython會話
------------------------------------- --------------------------------------------
Ctrl-p (or the up arrow key) 進(jìn)入歷史的上一個命令
Ctrl-n (or the down arrow key) 進(jìn)入歷史的下一個命令
Ctrl-r 搜索命令歷史

魔術(shù)命令

代碼粘貼命令

有時候想要在其他地方復(fù)制一段代碼,可直接在命令行里粘貼會報錯榔至,就可以使用%paste%cpaste命令抵赢。
先在其他地方復(fù)制一段代碼,然后

In [3]: %paste
>>> def donothing(x):
...     return x

## -- End pasted text --

PS:只需輸入%paste
%cpaste在輸完之后留了一個交互空間唧取,可以像文本編輯器一樣輸入铅鲤。

代碼執(zhí)行命令

%run可以用來執(zhí)行外部py腳本,函數(shù)枫弟,代碼邢享。

#-------------------------------------
# file: myscript.py

def square(x):
    """square a number"""
    return x ** 2

for N in range(1, 4):
    print(N, "squared is", square(N))

你可以在IPython會話中執(zhí)行:

In [6]: %run myscript.py
1 squared is 1
2 squared is 4
3 squared is 9

代碼計(jì)時命令

%timeit
統(tǒng)計(jì)一行代碼的執(zhí)行時間

In [8]: %timeit L = [n ** 2 for n in range(1000)]
1000 loops, best of 3: 325 μs per loop
```也可以使用``%%timeit``統(tǒng)計(jì)代碼塊的執(zhí)行時間。
```ipython
In [9]: %%timeit
   ...: L = []
   ...: for n in range(1000):
   ...:     L.append(n ** 2)
   ...: 
1000 loops, best of 3: 373 μs per loop

更多的魔術(shù)命令

%magic %lsmagic %timeit?

In [12]: %lsmagic
Available line magics:
%alias  %alias_magic  %autoawait  %autocall  %autoindent  %automagic  %bookmark  %cd  %cls  %colors  %config  %copy  %cpaste  %ddir  %debug  %dhist  %dirs  %doctest_mode  %echo  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %macro  %magic  %matplotlib  %mkdir  %notebook  %page  %paste  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %quickref  %recall  %rehashx  %reload_ext  %ren  %rep  %rerun  %reset  %reset_selective
  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext
%who  %who_ls  %whos  %xdel  %xmode

Available cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%cmd  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%markdown  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.

In Out 的妙用

在ipython中的每個會話都有編號淡诗,就是In 骇塘,如果有輸出就有一個Out編號伊履。在整個過程可以直接調(diào)用。

In [4]: print(In)
In [5]: Out
In [6]: Out[2] ** 2 + Out[3] ** 2
#也可以用_來代替上一個輸出款违,__代表第上兩個輸出唐瀑。
In [7]: print(_)
In [8]: print(__)
In [9]: print(___)
#也可以判斷第4次輸入是否有輸出
In [10]: 14 in Out
#查看歷史命令
In [16]: %history -n 1-4
   1: import math
   2: math.sin(2)
   3: math.cos(2)
   4: print(In)

在IPython中執(zhí)行shell命令

所謂shell命令就是在系統(tǒng)中執(zhí)行的命令。
ipython可以直接執(zhí)行系統(tǒng)命令插爹,這是普通python環(huán)境所沒有的哄辣。

In [1]: !ls
myproject.txt

In [2]: !pwd
/home/jake/projects/myproject

In [3]: !echo "printing from the shell"
printing from the shell

也可以對命令的返回值賦值

In [4]: contents = !ls

In [5]: print(contents)
['myproject.txt']

In [6]: directory = !pwd

In [7]: print(directory)
['/Users/herui/notebooks/tmp/myproject']

也可以使用魔法命令代替

In [14]: %cd ..
/home/herui/projects
%cat %cp %env %ls %man %mkdir %more %rm %pwd等等

錯誤與調(diào)試

錯誤棧樣式
使用魔法命令%xmode是exception mode的縮寫。它有三種模式赠尾。plain,Context,Verbose,默認(rèn)為Context.
修改模式:

%xmode Plain

調(diào)試:%debug 進(jìn)入錯誤環(huán)境力穗,然后可以自己調(diào)試。

Exception reporting mode: Plain
Automatic pdb calling has been turned ON

Traceback (most recent call last):

  File "<ipython-input-9-569a67d2d312>", line 3, in <module>
    func2(1)

  File "<ipython-input-1-d849e34d61fb>", line 7, in func2
    return func1(a, b)

  File "<ipython-input-1-d849e34d61fb>", line 2, in func1
    return a / b

ZeroDivisionError: division by zero



> <ipython-input-1-d849e34d61fb>(2)func1()
      1 def func1(a, b):
----> 2     return a / b
      3 
#在這里:
ipdb> print(b)
0
ipdb> quit

時間和效率記錄

四個命令
%time
%timeit
%prun ==> program run
lprun ==> line program run
time 和 timeit 不再展示

def sum_of_lists(N):
    total = 0
    for i in range(5):
        L = [j ^ (j >> i) for j in range(N)]
        total += sum(L)
    return total

%prun sum_of_lists(1000000)
%lprun -f sum_of_lists sum_of_lists(5000)
結(jié)果像這樣:
Timer unit: 1e-06 s

Total time: 0.009382 s
File: <ipython-input-19-fa2be176cc3e>
Function: sum_of_lists at line 1

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     1                                           def sum_of_lists(N):
     2         1            2      2.0      0.0      total = 0
     3         6            8      1.3      0.1      for i in range(5):
     4         5         9001   1800.2     95.9          L = [j ^ (j >> i) for j in range(N)]
     5         5          371     74.2      4.0          total += sum(L)
     6         1            0      0.0      0.0      return total

更多內(nèi)容請查看官方文檔萍虽!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睛廊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杉编,更是在濱河造成了極大的恐慌超全,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邓馒,死亡現(xiàn)場離奇詭異嘶朱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)光酣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門疏遏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人救军,你說我怎么就攤上這事财异。” “怎么了唱遭?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵戳寸,是天一觀的道長。 經(jīng)常有香客問我拷泽,道長疫鹊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任司致,我火速辦了婚禮拆吆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脂矫。我一直安慰自己枣耀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布羹唠。 她就那樣靜靜地躺著奕枢,像睡著了一般娄昆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缝彬,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天萌焰,我揣著相機(jī)與錄音,去河邊找鬼谷浅。 笑死扒俯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的一疯。 我是一名探鬼主播撼玄,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼墩邀!你這毒婦竟也來了掌猛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤眉睹,失蹤者是張志新(化名)和其女友劉穎荔茬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竹海,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慕蔚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了斋配。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孔飒。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艰争,靈堂內(nèi)的尸體忽然破棺而出坏瞄,到底是詐尸還是另有隱情,我是刑警寧澤甩卓,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布惦积,位于F島的核電站,受9級特大地震影響猛频,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛛勉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一鹿寻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诽凌,春花似錦毡熏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狱窘。三九已至,卻和暖如春财搁,著一層夾襖步出監(jiān)牢的瞬間蘸炸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工尖奔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搭儒,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓提茁,卻偏偏與公主長得像淹禾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茴扁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容