专栏首页python3python代码优化案例分析

python代码优化案例分析

第一版举例:

def displayNumType(num):
    print num,"is",
    if type(num)==type(0):
        print 'an interger'
    elif type(num)==type(0L):
        print 'a long'
    elif type(num)==type(0.0):
        print 'a float'
    elif type(num)==type(0+0j):
        print 'a complex number'
    else:
        print 'not a number at all!!'

最终版举例:

def displayNumType(num):
    print num,'is',
    if isinstance(num,(int,long,float,complex)):
        print 'a  number of type:',type(num).__name__
    else:
        print 'not a number at all!!'

优化思路:

1、减少函数调用的次数

在第一版代码中,每次判断会调用两次type()。

  • 优化方式:
import types
if type(num)==types.IntType...

2、对象值比较 VS 对象身份比较

type(0),type(42)等都是同一个对象“<type 'Int'>”,没有必要进行值得比较。因为每一个类型只有一个类型对象。

  • 优化方式:
if type(num) is types.IntType...  ##or type(0)

3、减少查询次数

为了得到整数的对象类型,解释器不得不首先查找types这个模块的名字,然后在该模块的字典中查找IntType。

通过使用from-import,可以减少一次查询。

  • 优化方式:
from types import IntType
if type(num) is IntType

4、惯例和代码风格

isinstance()函数让if语句更方便,并具有更好的可读性。

  • 优化方式:
if isinstance(num,int)...

摘选自《python核心编程(第二版)》第四章P68

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 3.7.0 笔记(不完整)

    Python break语句,就像在C语言中,打破了最小封闭for或while循环。 break语句用来终止循环语句,即循环条件没有False条件或者序列还没...

    py3study
  • python笔记之2.x上兼容3.x版本

    在前文《python笔记之3.x与2.x的使用区别》谈及了不同版本的区别问题。长远看软件新版本肯定会取代低版本的,除非你有成熟的老版本代码必须考虑兼容性问题,一...

    py3study
  • python编程之函数思想

    py3study
  • python接口测试之序列化与反序列化(四)

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python...

    无涯WuYa
  • python中基本数据类型有啥用?

    字符串类型使用的时候,都用双引号””来表示的,不包含双引号。也可以用单引号‘’来表示,也不包含单引号。

    刘金玉编程
  • Python基础04 运算

    Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们展开后面的内容,高级应用暂时不介绍) 数学运算 >>>print 1+9   ...

    Vamei
  • Python的命令行参数解析

    命令行参数解析在编程语言中基本都会碰到,Python中内置了一个用于命令项选项与参数解析的模块argparse。下面主要介绍两种解析Python命令行参数的方式...

    Tyan
  • R语言入门之折线图

    在R语言中可以使用基本绘图函数lines(x, y, type=)来绘制线条,这里参数x和y分别是数值型向量,代表着横坐标和纵坐标的数据,参数type=...

    生信与临床
  • 【TS】251- TypeScript 3.5发布:速度提升、工具智能

    TypeScript 3.5 发布了,此版本在编译器、语言和编辑器工具上带来了一些新特性。

    pingan8787
  • Python之列表操作(必知)

    列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

    咻一咻

扫码关注云+社区

领取腾讯云代金券