1.1 shell還是Notebook
Jupyter Notebook 是 IPython shell 基於瀏覽器的圖形界面,提供了一系列豐富的動態展示功能。Jupyter Notebook 不僅可以執行 Python/IPython 語句,還允許用戶添加格式化文本、靜態和動態的可視化圖像、數學公式、JavaScript 插件,等等。不僅如此,這些 Notebook 文檔還能以共享方式存儲,以便其他人可以打開這些 Notebook,並且在他們自己的系統中執行這些 Notebook 代碼。
> jupyter notebook
1.2 IPython的幫助和文檔
符號 ? 用於瀏覽文檔,符號 ?? 用於瀏覽源代碼,而 Tab 鍵可以用於自動補全。
每一個 Python 對象都有一個字符串的引用,該字符串即 docstring。大多數情況下,該字符串包含對象的簡要介紹和使用方法。
help(len) Help on built-in function len in module builtins: len(obj, /) Return the number of items in a container.
len? Signature: len(obj, /) Docstring: Return the number of items in a container. Type: builtin_function_or_method
這種方法也適用於你自己創建的函數或者其他對象!
def square(a): """Return the square of a.""" return a ** 2 square? Signature: square(a) Docstring: Return the square of a. Type: function
square?? Signature: square(a) Source: def square(a): """Return the square of a.""" return a ** 2 Type: function
有時 ?? 不能顯示源代碼。這是因爲該對象並不是用 Python 實現的,而是用 C 語言或其他編譯擴展語言實現的。在這種情況下,?? 後綴將等同於 ? 後綴。
使用TAB補全對象或命令。
使用TAB可以查看系統中可導入的包或者包中可導入的對象。
使用*進行通配符匹配。
str.*find*? str.find str.rfind *Warning? BytesWarning DeprecationWarning FutureWarning ImportWarning PendingDeprecationWarning ResourceWarning RuntimeWarning SyntaxWarning UnicodeWarning UserWarning Warning
1.3 快捷鍵
用上下方向鍵查找歷史,如果輸入 def 然後按下上方向鍵,則會在命令歷史中找到以 def 開頭的最近的命令(如果有的話)。
- Ctrl + a 將光標移到本行的開始處
- Ctrl + e 將光標移到本行的結尾處
- Ctrl + l 清除終端屏幕的內容
- Ctrl + c 中斷正在執行的 Python 命令
- Ctrl + d 退出當前 IPython 會話
1.4 IPython魔法命令
魔法命令有兩種形式:行魔法(line magic)和單元魔法(cell magic)。行魔法以單個 % 字符作爲前綴,作用於單行輸入;單元魔法以兩個 %% 作爲前綴,作用於多行輸入。
- %paste:將剪切板中的代碼完整粘貼並且自動執行代碼輸入結果。
%paste def f(x, y, z): return (x+y)/z a = 5 b = 6 c = 7 result = f(a, b, c) print(result) ## -- End pasted text -- 1.5714285714285714
- %cpaste也是粘貼文本的,可以粘貼任何一條代碼,在輸入結束命令之前都不會執行代碼,輸入‘--’按回車或者使用‘Ctrl-D’停止粘貼代碼,停止粘貼代碼後會執行代碼。
- %run myscript.py:執行腳本內容,或者使用runfile命令。
#------------------------------------- # file: myscript.py def square(x): """求平方""" return x ** 2 for N in range(1, 4): print(N, "squared is", square(N))
- %timeit:計算一行Python語句執行的時間。
%timeit L = [n ** 2 for n in range(1000)] 416 µs ± 58.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
- 對於多行語句,可以加入第二個 % 符號將其轉變成單元魔法,以處理多行輸入。
- %reset:指刪除interactive命名空間中全部的變量名。
- %xdel variable:刪除單個變量的引用。
- %magic:獲取可用魔法函數的通用描述以及一些示例。
- %lsmagic:獲取所有魔法函數的列表。
1.5 輸入和輸出歷史
In[1]:/Out[1]:給出了在當前會話中如何獲取輸入和輸出歷史的線索。
In 對象是一個列表,按照順序記錄所有的命令(列表中的第一項是一個佔位符,以便 In[1] 可以表示第一條命令)。
Out 對象不是一個列表,而是一個字典。它將輸入數字映射到相應的輸出(如果有的話)。
任何返回值是 None 的命令都不會加到 Out 變量中。
變量 _(單下劃線)用於更新以前的輸出,雙下劃線獲得倒數第二個歷史輸出,三下劃線獲得倒數第三個歷史輸出,僅止於此。
Out[X]的簡寫是_X。
要禁止一個命令的輸出,最簡單的方式就是在行末尾處添加一個分號。
使用%history魔法命令輸出歷史記錄。
1.6 IPython和shell命令
使用 ! 符號作爲前綴在 IPython 中執行任何shell命令行命令。
shell 命令不僅可以從 IPython 中調用,還可以和 IPython 命名空間進行交互。通過一個賦值操縱符可以將任何 shell 命令的輸出保存到 Python 中。
需要注意的是這些結果並不以列表的形式返回,而是以 IPython 中定義的一個特殊 shell 返回類型的形式返回。這看上去和 Python 列表很像,並且可以像列表一樣操作。但是這種類型還有其他功能,例如 grep 和 fields 方法以及 s、n 和 p 屬性,允許我們輕鬆地搜索、過濾和顯示結果。
1.7 與shell相關的魔法命令
自動魔法(automagic)函數:%cd、%cat、%cp、%env、%ls、%man、%mkdir、%more、%mv、%pwd、%rm 和 %rmdir。如果 automagic 被打開,以上任何一個魔法命令都可以省略 % 符號,這使得 IPython 提示符可以被當做當作普通 shell 一樣使用。
1.8 錯誤和調試
改變錯誤打印信息:
- %xmode Context:普通(默認)。
- %xmode Plain:更加緊湊。
- %xmode Verbose:加入了一些額外的信息,包括任何被調用的函數的參數。
使用%debug開啓調試模式。
使用%pbd函數在發生錯誤時自動打開調試界面。
使用%run -d交互式地運行腳本。
1.9 代碼的分析和計時
- %time:對單個語句的執行時間進行計時。
- %timeit:對單個語句的重複執行進行計時,以獲得更高的準確度。
有時候重複一個操作並不是最佳選擇。例如,如果有一個列表需要排序,我們可能會被重複操作誤導。對一個預先排好序的列表進行排序,比對一個無序的列表進行排序要快,所以重複運行將使結果出現偏差,對於這種情況,%time 魔法函數可能是更好的選擇。
- %prun:利用分析器運行代碼。
- %lprun:利用逐行分析器運行代碼。
- %memit:測量單個語句的內存使用。
- %mprun:通過逐行的內存分析器運行代碼。