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

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

3天内不再提示

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

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

1.3 python迭代工具最小计时

描述

timertool.py:

timer_compatible():根据win版、Unix版、python版本选择对应计时函数计算总时间。

mintime():计算每个迭代工具执行的最小时间。

timeiterevn.py:

timeiter_compatible():计算每个迭代工具执行的总时间、平均时间、最小时间。

示例

#timertool.py
import time,sys
reps = 1000
repslist = range(reps)

if sys.version[:3]<'3.3':
   if sys.platform[:3] == 'win':
       timefunc = time.clock
   else:
       timefunc = time.time
else:
   timefunc = time.perf_counter
   
def trace(*args):
   #print('args={}'.format(args))
   pass

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)

def timer_compatible(func,*pargs,**kargs):
   _reps = kargs.pop('_reps',1000)
   trace(func,pargs,kargs,_reps)
   repslist = range(_reps)
   begin = timefunc()
   for i in repslist:
       ret = func(*pargs,**kargs)
   usetime = timefunc() - begin
   return (usetime,ret)
   
def mintime(func,*pargs,**kargs):
   _reps = kargs.pop('_reps',50)
   mintime = 2 ** 32
   for i in range(_reps):
      (usetime,ret) = timer_compatible(func,*pargs,_reps=1,**kargs)
       if usetime < mintime:
           mintime = usetime
   return (mintime,ret)
   
# 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())
def commstr(s):
   commstr = '# '+s
   print(commstr)
functp = (forloop,listComp,mapCall,genExpr,genFunc)
timetp = (timertool.timer_compatible,timertool.mintime)
commstr('-'*33)
commstr(str(sys.version))
def timeiter():
   reslist=[]
   for test in funcList:
       usetime,result = timertool.timer(test)
       reslist.append((test.__name__,usetime,result[0],result[-1],len(result)))

   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]))
       commstr('%-9s:%.5f=>[%s....%s....%s]'%(L[0],L[1],L[2],L[3],L[4]))
   commstr('-'*33)  

def timeiter_compatible():
   _reps = 1000
   commstr('-'*33)
   for ttp in timetp:
       reslist=[]
       commstr('<{}>'.format(ttp.__name__))
       for ftp in functp:
           usetime,result = ttp(ftp,_reps=_reps)
           reslist.append((ftp.__name__,usetime,result[0],result[-1],len(result)))
       commstr('-'*33)
       reslistsort=sorted(reslist,key = lambda x:x[1])
       if ttp.__name__ == 'timer_compatible':
           commstr('总时间排序')
       else:
           commstr('最小时间排序')
       commstr('-'*33)
       for L in reslistsort:
           commstr('%-9s:%.5f=>[%s....%s....%s]'%(L[0],L[1],L[2],L[3],L[4]))
       commstr('-'*33)
       if ttp.__name__ == 'timer_compatible':
           commstr('平均时间排序')
           commstr('-'*33)
           for L in reslistsort:
               commstr('%-9s:%.5f=>[%s....%s....%s]'%(L[0],(L[1]/_reps),L[2],L[3],L[4]))
           commstr('-'*33)
timeiter_compatible()

# ---------------------------------
# 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)]
# ---------------------------------
# 
# ---------------------------------
# 总时间排序
# ---------------------------------
# listComp :0.52310=>[26799....116....8000]
# genFunc :0.92414=>[26800....117....8000]
# genExpr :0.94791=>[26800....117....8000]
# forloop :1.01522=>[26800....117....8000]
# mapCall :1.12953=>[26800....117....8000]
# ---------------------------------
# 平均时间排序
# ---------------------------------
# listComp :0.00052=>[26799....116....8000]
# genFunc :0.00092=>[26800....117....8000]
# genExpr :0.00095=>[26800....117....8000]
# forloop :0.00102=>[26800....117....8000]
# mapCall :0.00113=>[26800....117....8000]
# ---------------------------------
# 
# ---------------------------------
# 最小时间排序
# ---------------------------------
# listComp :0.00039=>[26799....116....8000]
# genFunc :0.00065=>[26800....117....8000]
# genExpr :0.00066=>[26800....117....8000]
# forloop :0.00072=>[26800....117....8000]
# mapCall :0.00073=>[26800....117....8000]
# ---------------------------------

1.4 time计时

描述

python的time模块对Windows、Unix、python版本提供不同计时方法。

NO 系统版本 对应方法
1 Windows time.clock()
2 Unix time.time()
3 =python3.8 time.perf_counter(),python3.3开始支持

两次调用之间的时间差用于计时。

示例

>>> import time
>>> begin = time.clock()
>>> end = time.clock()
>>> use=end - begin
>>> begin,end,use
(782.9449924, 793.3414938, 10.39650139999992)
>>> begin = time.time()
>>> end = time.time()
>>> use = end - begin
>>> begin,end,use
(1674368678.73148, 1674368685.6409733, 6.909493446350098)
>>> begin = time.perf_counter()
>>> end = time.perf_counter()
>>> use = end - begin
>>> begin,end,use
(899.3102242, 908.7626699, 9.452445699999998)

1.5 sys平台版本

描述

python通过sys模块获取平台版本信息

NO 属性 描述
1 sys.version python版本
2 sys.platform 系统平台

示例

>>> import sys
>>> v=sys.version
>>> pf=sys.platform
>>> v
'3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)]'
>>> pf
'win32'
>>> v[:3],pf[:3]
('3.7', 'win')

1.6 sorted按键排序

用法

sorted(iterable, /, *, key=None, reverse=False)

描述

python内置函数sorted(可迭代对象,key)属于迭代工具,按指定key对可迭代对象进行排序。

key:自定义排序函数。

reverse:默认False为升序。

示例

>>> zs={'name':'张三','yuwen':90,'shuxue':100,'english':60}
>>> ls={'name':'李四','yuwen':91,'shuxue':95,'english':85}
>>> ww={'name':'王五','yuwen':80,'shuxue':99,'english':82}
>>> classOne=[zs,ls,ww]
>>> for i,stu in zip(range(1,len(classOneSort)+1),classOneSort):
   zf = stu['yuwen']+stu['shuxue']+stu['english']
   print("总分第{i:0>3}名:{d[name]:>4},语文={d[yuwen]:>3},数学={d[shuxue]:>3},英语={d[english]:>3},总分={zf:>3}".format(d=stu,zf=zf,i=i))

   
总分第001名:  李四,语文= 91,数学= 95,英语= 85,总分=271
总分第002名:  王五,语文= 80,数学= 99,英语= 82,总分=261
总分第003名:  张三,语文= 90,数学=100,英语= 60,总分=250
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 生成器
    +关注

    关注

    7

    文章

    313

    浏览量

    20973
  • python
    +关注

    关注

    55

    文章

    4781

    浏览量

    84440
  • for循环
    +关注

    关注

    0

    文章

    61

    浏览量

    2493
收藏 人收藏

    评论

    相关推荐

    关于Python巧妙而强大的内置函数

    python内置了一些非常巧妙而且强大的内置函数,对初学者来说,一般不怎么用到,我也是用了一段时间python之后才发现,哇还有这么好的
    发表于 12-14 14:52 528次阅读
    关于<b class='flag-5'>Python</b>巧妙而强大的<b class='flag-5'>内置</b><b class='flag-5'>函数</b>

    一文详解python调用函数

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

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

    函数Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常有帮助,这里就针对递归函数与匿名函数
    发表于 07-19 16:22

    python迭代

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

    python内置函数详细资料概述

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

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

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

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

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

    python迭代器详解

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

    Python支持递归函数

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

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

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

    python常用的内置函数和模块

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

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

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

    python函数函数之间的调用

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

    python调用math函数的方法

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

    不属于python内置函数

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