0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python迭代调用内置函数计时比较(上)

jf_78858299 来源:梯阅线条小梯子 作者:小梯子 2023-02-21 14:56 次阅读

python迭代工具自动调用迭代对象next方法,对迭代对象进行遍历。

python的for循环、列表解析、map方法、生成器表达式、生成器方法都是迭代工具。

python可迭代对象包括:字符串、列表、元组、字典、集合、range、enumerate、文件等。

1.1 python迭代调用内置函数计时比较

描述

timetool.py:计时模块,循环调用func函数1000次,返回使用时间和最后一次调用结果。

time.perf_counter():返回性能计数器的值,单位为秒。两次调用之间的差值用于计时。

timeiterenv.py:各种迭代环境调用内置函数ord(),返回列表。对各种迭代函数调用计时模块的计时函数进行计时,将计时结果存放在列表,并且按从低到高的顺序对计时结果进行排序。

sorted():key = lambda x:x[1],按自定义键函数进行排序,x为sorted的第1个参数对应排序对象,x[1]表示按第1个索引值进行排序,本例中对应函数计时结果。

通过例子得出:迭代环境调用内置函数耗时从低到高的顺序为:

NO 函数 描述
1 mapCall map迭代工具
2 listComp 列表解析
3 genFunc 生成器函数
4 genExpr 生成器表达式
5 forloop for循环

示例

# timetool.py
import time
reps = 1000
repslist = range(reps)

def timer(func,*pargs,**kargs):
   begin = time.perf_counter()
   for i in repslist:
       ret = func(*pargs,**kargs)
   usetime = time.perf_counter() - begin
   return (usetime,ret)

# timeiterenv.py
import sys,timertool
s = '梯阅线条tyxt'*1000

def forloop():
   res = []
   for x in s:
       res.append(ord(x))
   return res
   
def listComp():
   return [ord(x) for x in s]

def mapCall():
   return list(map(ord,s))
   
def genExpr():
   return list(ord(x) for x in s)
   
def genFunc():
   def gen():
       for x in s:
           yield ord(x)
   return list(gen())
   
print(sys.version)
reslist=[]
for test in (forloop,listComp,mapCall,genExpr,genFunc):
   usetime,result = timertool.timer(test)
   reslist.append((test.__name__,usetime,result[0],result[-1],len(result)))

print('-'*33)        
reslistsort=sorted(reslist,key = lambda x:x[1])
for L in reslistsort:
   print('%-9s:%.5f=>[%s....%s....%s]'%(L[0],L[1],L[2],L[3],L[4]))
print('-'*33)

# 迭代调用内置函数计时比较结果
# 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)]
# ---------------------------------
# mapCall :0.20925=>[26799....116....8000]
# listComp :0.42197=>[26799....116....8000]
# genFunc :0.57103=>[26799....116....8000]
# genExpr :0.57259=>[26799....116....8000]
# forloop :0.66177=>[26799....116....8000]
# ---------------------------------

1.2 python迭代调用用户函数计时比较

描述

python各种迭代环境调用用户函数ord(x)+1,进行计时比较。

timertool.py不变,修改timeiterevn.py即可。

通过例子得出:迭代环境调用用户函数耗时从低到高的顺序为:

NO 函数 描述
1 listComp 列表解析
2 genExpr 生成器表达式
3 genFunc 生成器函数
4 forloop for循环
5 mapCall map迭代工具

示例

# timeiterevn.py
import sys,timertool
s = '梯阅线条tyxt'*1000

def forloop():
   res = []
   for x in s:
       res.append(ord(x)+1)
   return res
   
def listComp():
   return [ord(x) for x in s]

def mapCall():
   return list(map(lambda x:ord(x)+1,s))
   
def genExpr():
   return list(ord(x)+1 for x in s)
   
def genFunc():
   def gen():
       for x in s:
           yield ord(x)+1
   return list(gen())

commstr = '# '
print(commstr+str(sys.version))
reslist=[]
for test in (forloop,listComp,mapCall,genExpr,genFunc):
   usetime,result = timertool.timer(test)
   reslist.append((test.__name__,usetime,result[0],result[-1],len(result)))

print(commstr+'-'*33)        
reslistsort=sorted(reslist,key = lambda x:x[1])
for L in reslistsort:
   print(commstr+'%-9s:%.5f=>[%s....%s....%s]'%(L[0],L[1],L[2],L[3],L[4]))
print(commstr+'-'*33)
# 调用用户函数计时比较结果
# 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)]
# ---------------------------------
# listComp :0.50272=>[26799....116....8000]
# genExpr :0.83316=>[26800....117....8000]
# genFunc :0.85477=>[26800....117....8000]
# forloop :0.94426=>[26800....117....8000]
# mapCall :0.96591=>[26800....117....8000]
# ---------------------------------
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 生成器
    +关注

    关注

    7

    文章

    315

    浏览量

    21003
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84628
  • for循环
    +关注

    关注

    0

    文章

    61

    浏览量

    2502
收藏 人收藏

    评论

    相关推荐

    一文详解python调用函数

    函数被定义后,本身是不会自动执行的,只有在被调用后,函数才会被执行,得到相应的结果。但是在 Python 中我们要注意一个关键点,就是Python
    发表于 10-01 10:45 676次阅读

    快速掌握Python的递归函数与匿名函数调用

    也有迭代的需求,即将自定义类型定义成迭代器类型即可(需要在类里实现__iter__()和__next__()方法,可供next和iter函数调用该对象)。for循环本质
    发表于 07-19 16:22

    python迭代

    的,哪些是不可迭代的。但是对新手来说,可能需要借助一些函数来判别,比如 Python 内置的 collections.abc 模块,这个模块只有在
    发表于 02-24 15:42

    python内置函数详细资料概述

    本文档的主要内容详细介绍的是python内置函数详细资料概述。
    发表于 11-18 08:00 0次下载

    python的常用函数有哪些

    map() 是 Python 内置的高阶函数,它接收一个函数 f 和一个list ,并通过把函数 f 依次作用在list 的每个元素
    发表于 02-25 11:52 9次下载
    <b class='flag-5'>python</b>的常用<b class='flag-5'>函数</b>有哪些

    python提供的68个内置函数详解

      内置函数就是Python给你提供的,拿来直接用的函数,比如print.,input等。 截止到python版本3.6.2 ,
    的头像 发表于 10-27 09:14 2181次阅读

    进阶必备的68个Python 内置函数分析

    来源: pypypypy 内置函数就是Python给你提供的,拿来直接用的函数,比如print.,input等。 截止到python版本3.
    的头像 发表于 11-01 10:18 4057次阅读

    python迭代器详解

    ] for i in alist:... print(i)...012345 2. 是否可迭代? 对 Python 比较熟悉的朋友,肯定知道哪些数据类型是可迭代的,哪些是不可
    的头像 发表于 02-24 15:42 1333次阅读

    Python支持递归函数

    Python支持递归函数——即直接或间接地调用自身以进行循环的函数。递归是颇为高级的话题,并且它在Python中相对少见。然而,它是一项应该
    的头像 发表于 02-21 14:28 644次阅读

    python迭代调用内置函数计时比较(下)

    python迭代工具自动调用迭代对象next方法,对迭代对象进行遍历。 python的fo
    的头像 发表于 02-21 14:56 532次阅读

    python常用的内置函数和模块

    python数字包含常用的内置函数和模块,比如pow()、abs()、floor()、int()等函数,以及math、random等模块。
    的头像 发表于 03-10 10:10 935次阅读

    python定义函数调用函数的顺序

    定义函数调用函数的顺序 函数被定义后,本身是不会自动执行的,只有在被调用后,函数才会被执行,得
    的头像 发表于 10-04 17:17 1380次阅读

    python函数函数之间的调用

    函数函数之间的调用 3.1 第一种情况 程序代码如下: def x ( f ): def y (): print ( 1 ) return y def f (): print ( 2 )x(f
    的头像 发表于 10-04 17:17 587次阅读

    python调用math函数的方法

    Python编程中,数学函数是非常重要的工具,我们可以使用它们进行各种数值计算、几何运算和统计分析等操作。Python的标准库中内置了很多数学函数
    的头像 发表于 11-22 11:01 2961次阅读

    不属于python内置函数

    Python是一种高级编程语言,它提供了许多内置函数,可以帮助开发人员更轻松地处理各种任务。但是,在Python中并非所有的函数都是
    的头像 发表于 11-29 14:27 1458次阅读