添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
无邪的创口贴  ·  python-2.7 ...·  1小时前    · 
大方的沙滩裤  ·  linux ...·  1小时前    · 
礼貌的消炎药  ·  Activation fails all ...·  1小时前    · 
耍酷的柳树  ·  Still cant upgrade to ...·  1小时前    · 
聪明伶俐的跑步鞋  ·  Ansys Insight: ...·  1 月前    · 
很拉风的水煮肉  ·  Decoding SQL: WHERE ...·  3 月前    · 

可能是自己做性能测试这块的缘故,平时在写脚本或者代码的时候,脑子中总是会想我这样写出来的效率高吗?总想用更高效的方法去实现同一个功能?可能互联网人多多少少有一点点的强迫症吧,今天就和大家分享实践下几种 python 不同的执行效率的写法,作为有追求的技术人员,不能仅仅局限于完成功能,更多内容可以学习《测试工程师 Python 工具开发实战》书籍。

一、效率对比

一个功能的实现,可以用多种语句来实现,比如说:while 语句、for 语句、生成器、列表推导、内置函数等实现,然而他们的效率并不一样。可以写一个小程序来测试它们执行的效率。

二、代码内容

将一个数字大小为 20 万的数字,依次取绝对值,放到列表中,测试重复 1 千次。

演示 Python 的对比代码
# encoding: utf-8
@python: v3.5.4
@author: hutong
@file: comparePerf.py
@time: 2019/3/17 下午12:16
import time, sys
reps = 1000  # 测试重复次数
nums = 200000  # 测试时数字大小
def tester(func, *args):  # 总体测试函数
    startTime = time.time()
    for i in range(reps):
        func(*args)
    elapsed = time.time() - startTime  # 用time模块来测试,结束时间与开始时间差
    return elapsed
def while_Statement():  # while循环实现
    res = []
    x = 0
    while nums > x:
        x += 1
        res.append(abs(x))
def for_Statement():  # for循环实现
    res = []
    for x in range(nums):
        res.append(abs(x))
def generator_Expression():  # 生成器实现
    res = list(abs(x) for x in range(nums))
def list_Comprehension():  # 列表解析实现
    res = [abs(x) for x in range(nums)]
if __name__ == "__main__":
    print(sys.version)  # 打印系统版本
    tests = [while_Statement, for_Statement, generator_Expression, list_Comprehension]
    for testfunc in tests:  # 将待测函数放置列表中依次遍历
        print(testfunc.__name__.ljust(20), ': ', tester(testfunc))

测试结果是发现利用 python 的列表推导比常见的 for 循环,while 循环要快很多。分析了下原因:列表推导内的迭代在解释器内是以 C 语言的速度运行的 (一般是 for 循环的两倍,对大型文件操作而言,用列表推导效果尤其明显), while 语句是纯粹用 Python 代码写成,所以速度最慢。