7个提升Python程序员的性能的好习惯

    ①使用局部变量代替全局变量
        如:s = os.linesep  #优点简短标识便于维护,局部变量查找更快,能提高性能并节省内存;
    ②减少函数调用次数
        对象类型判断时,采用isinstance()比较最优,对象类型身份(id())比较次子,采用(type())比较最次;
        #如判定变量num是否为整数类型
            isinstance(num, (int)) #调用一次函数
            type(num) is type(0)   #身份比较
            type(num) == type(0)   #调用三次函数
        #不要把重复操作的内容作为参数放到循环条件中,避免重复运算
            #每次循环都需要重新执行len(a)
                while i < len(a):
                    statement
            #len(a)仅执行一次
                m = len(a)
                while i < m:
                    statement
        #使用X中的某个函数或对象Y时,应该直接用 from X import Y,而不是import X 或 import X.Y;
            这样可以减少一次查询(解析器不必要首先查找X模块,然后在X模块的字典中查找Y)
    ③采用映射代替条件查找
        #映射(比如dict等)的搜索速度远快于条件语句(比如if等)。
        #if查找
            if a == 1:
                b = 10
            elif a == 2:
                b = 20
            ...
        #dict查找,性能更优
            d = {1:10, 2:20, ...}
            b = d[a]
    ④直接迭代序列元素
        对序列(str,list,tuple等),直接迭代序列元素,比迭代元素的索引速度更快。
        a = [1, 2, 3]
        #迭代元素
        for item in a:
            print(item)
        #迭代索引
        for i in range(len(a)):
            print(a[i])
    ⑤采用生成器表达式代替列表解析
     列表解析(list comprehension),会产生整个列表,对大量数据的迭代会产生负面效应.
     而生成器表达式则不会,其不会真正创建列表,而返回一个生成器,在需要时产生一个值(延迟计算),对内存更加优化。
     #计算文件f的非空字符个数
     #列表解析
     a = sum([i*i for i in range(6)])
     #生成器表达式
     b = sum(i*i for i in range(6))
    ⑥先编译后调用
     # 使用eval(),exec()函数执行代码时,最好调用代码对象(提前通过compile()函数编译成字节码),而不是直接调用str,可以避免多次执行重复编译过程,提高程序性能
     # 正则表达式模式模式匹配也类似,也最好先将正则表达式模式编译成regex对象(通过re.complie()函数),然后再执行比较和匹配
    ⑦模块编程习惯
     #模块中的最高级别Python语句(没有缩进的代码)会在模块导入(import)时执行(不论其是否真的必要执行)。
      因此,应尽量将模块所有的功能代码放到函数中,包括主程序相关的功能代码也可以放到main()函数中,主程序本身调用main()函数
     #可以在模块的main()函数中书写测试代码。在主程序中,检测name的值,如果为'main'(表示模块是被直接执行),则调用main()函数,进行测试;
      如果为模块名字(表示模块是被调用),则不进行测试

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值