第一版举例:
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>