检测函数运行时间

【问题描述】gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

因为很多函数的运行时间很短,数值很小,通常会被显示为0,不便于与其他函数对比,从而评价函数的优劣,所以将函数运行多次,就可以检测它的运行时间。编写一个函数修饰器,反复调用100次求相亲数的函数,检测函数的总共运行时间,调用次数100次通过参数传递给函数修饰器。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

输出结果:gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

运行100次amicable函数花费时间:3.088855028152466秒gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【题前思考】gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

根据问题描述,填写表5-3-3。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

表5-3-3 问题分析gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

检测函数运行时间gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【解题思路】gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

可以定义一个函数用于接收函数修饰器的参数,由这个函数返回真正的函数修饰器,并将参数保存到真正的修饰器中。内置模块time中提供了time函数,它可以提供以秒表示的当前时刻,将函数运行前和运行后的时刻相减,就可以得到函数运行花费的时间。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【程序代码】gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

检测函数运行时间gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【代码分析】gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

①:定义timeit(n)函数用于接收函数修饰器参数n,n表示函数的运行次数。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

②:定义runtime(fun)函数,runtime才是真正的函数修饰器,它的参数fun就是修饰器的目标函数。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

③:使用time( )函数返回以浮点数表示的从1970年1月1日00:00:00开始到调用时刻的秒数的时间值。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

④:以给定的参数调用函数n次。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

⑤:输出函数的运行时间。变量start存放的是开始运行的时刻,time( )取得当前时刻,所以time( )-start就是目标函数调用n次所花的时间。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

⑥:返回包装器函数wrapper,也就是目标函数fun的“替身”函数。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

⑦:返回真正的函数修饰器runtime。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

⑧:以参数100调用函数修饰器,意思是如果调用被修饰的函数,它就会被执行100次,然后输出运行时间。如果想要执行其他次数,改变参数值即可。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

检测函数运行时间gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

以上代码的执行过程如下:gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

检测函数运行时间gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

#runtime才是真正的函数修饰器,该调用将参数100存储到修饰器runtimegXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

runtime=timeit(100)gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

#用函数包装器替代目标函数amicable,目标函数存储于包装器函数中gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

amicable=runtime(amicable)gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

经过以上两次调用,修饰器参数和目标函数本身就传递到了包装器中,由包装器代替目标函数,以后对函数的调用就变成了对包装器函数的调用,于是就会在调用真正的目标函数后输出函数的运行时间。gXw100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

关 键 词

函数运行时间

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢