
148
|
第七章
如果你不知道哪幾行最常被執行,就使用效能分析工具—
line_pro
fi
ler
(參見第 37 頁的〈使用 line_profiler 進行一行一行的量測〉)是最合適
的,你將瞭解哪幾行最常被執行,以及哪幾行在 Python 虛擬機器裡耗費
最多成本,因此,你能夠掌握必須將焦點放在哪裡,才能夠獲得最大的效
能提升。
增加一些型別注釋
圖 7-2 顯示,我們的函式幾乎每一行都在呼叫 Python 虛擬機器。使用較高階的 Python
物件時,我們的所有數值運算也都在呼叫 Python。我們必須把這些都轉換成本地 C 物
件,然後,在處理過我們的數值編程之後,必須將結果轉換回 Python 物件。
在範例 7-6 中,可以看到如何使用
cdef
語法增加一些基本型別(primitive type)。
注意,這些型別只有 Cython 理解,Python 並
不
瞭解。Cython 利用這些
型別將 Python 程式碼轉換成 C 物件,這些物件不必回頭呼叫 Python 堆
疊;這表示,操作執行得比較快,但會失去彈性,並且損及開發速度。
我們增加的型別有︰
•
int
,有號整數
•
unsigned
int
,無號整數,不能是負數
•
double
complex
,雙精度複數
cdef
關鍵字讓我們在函式主體裡宣告變數,這些變數必須被宣告在函式頂端,因為那是
C 語言規格的要求。
範例
7-6
增加基本
C
型別
,
透過多用
C
做一些工作
,
少經由
Python
虛擬機器
,
開始讓編譯的函式執行得更迅速
def calculate_z(int ...