第一版舉例:
1
2
3
4
5
6
7
8
9
10
11
12
<code>def</code> <code>displayNumType(num):</code>
<code> </code><code>print</code> <code>num,</code><code>"is"</code><code>,</code>
<code> </code><code>if</code> <code>type</code><code>(num)</code><code>=</code><code>=</code><code>type</code><code>(</code><code>0</code><code>):</code>
<code> </code><code>print</code> <code>'an interger'</code>
<code> </code><code>elif</code> <code>type</code><code>(num)</code><code>=</code><code>=</code><code>type</code><code>(</code><code>0L</code><code>):</code>
<code> </code><code>print</code> <code>'a long'</code>
<code> </code><code>elif</code> <code>type</code><code>(num)</code><code>=</code><code>=</code><code>type</code><code>(</code><code>0.0</code><code>):</code>
<code> </code><code>print</code> <code>'a float'</code>
<code> </code><code>elif</code> <code>type</code><code>(num)</code><code>=</code><code>=</code><code>type</code><code>(</code><code>0</code><code>+</code><code>0j</code><code>):</code>
<code> </code><code>print</code> <code>'a complex number'</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>print</code> <code>'not a number at all!!'</code>
最終版舉例:
<code> </code><code>print</code> <code>num,</code><code>'is'</code><code>,</code>
<code> </code><code>if</code> <code>isinstance</code><code>(num,(</code><code>int</code><code>,</code><code>long</code><code>,</code><code>float</code><code>,</code><code>complex</code><code>)):</code>
<code> </code><code>print</code> <code>'a number of type:'</code><code>,</code><code>type</code><code>(num).__name__</code>
優化思路:
1、減少函數調用的次數
在第一版代碼中,每次判斷會調用兩次type()。
優化方式:
<code>import</code> <code>types</code>
<code>if</code> <code>type</code><code>(num)</code><code>=</code><code>=</code><code>types.IntType...</code>
2、對象值比較 VS 對象身份比較
type(0),type(42)等都是同一個對象“<type 'Int'>”,沒有必要進行值得比較。因為每一個類型隻有一個類型對象。
<code>if</code> <code>type</code><code>(num) </code><code>is</code> <code>types.IntType... </code><code>##or type(0)</code>
3、減少查詢次數
為了得到整數的對象類型,解釋器不得不首先查找types這個子產品的名字,然後在該子產品的字典中查找IntType。
通過使用from-import,可以減少一次查詢。
<code>from</code> <code>types </code><code>import</code> <code>IntType</code>
<code>if</code> <code>type</code><code>(num) </code><code>is</code> <code>IntType</code>
4、慣例和代碼風格
isinstance()函數讓if語句更友善,并具有更好的可讀性。
<code>if</code> <code>isinstance</code><code>(num,</code><code>int</code><code>)...</code>
摘選自《python核心程式設計(第二版)》第四章P68
<b></b>
<b>本文轉自Grodd51CTO部落格,原文連結:http://blog.51cto.com/juispan/2050529</b><b>,如需轉載請自行聯系原作者</b>