Python數據科學手冊(1) IPython:超越Python

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:通過逐行的內存分析器運行代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章