天天看点

python代码优化案例分析

第一版举例:

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)等都是同一个对象“&lt;type 'Int'&gt;”,没有必要进行值得比较。因为每一个类型只有一个类型对象。

<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>