范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

使用timeit测试Python函数的性能

  timeit  是Python标准库内置的小工具,可以快速测试小段代码的性能。 认识timeit
  timeit 函数:  timeit.timeit(stmt, setup,timer, number)
  参数说明:  stmt : statement的缩写,你要测试的代码或者语句,纯文本,默认值是 "pass" setup : 在运行 stmt  前的配置语句,纯文本,默认值也是 "pass" timer : 计时器,一般忽略这个参数 number : stmt  执行的次数,默认是1000000,一百万
  repeat 函数:  timeit.repeat(stmt, setup, timer, repeat, number)
  是timeit的repeat版,可以指定重复timeit的次数,默认是3次,然后返回一个数组。
  举一个简单的例子来说明用法:  import timeit print(timeit.timeit("output = 10*5"))  # 0.014560436829924583 print(timeit.repeat("output = 10*5"))  # [0.01492984383367002, 0.01342877489514649, 0.013638464966788888]
  嗯,看上去没毛病,实际上谁也不会去测没有意义的加减乘除,我们需要测试自己的代码。  测试多行代码
  测试多行代码可以用分号来连接语句。  print(timeit.timeit(stmt="a=10;b=10;sum=a+b"))
  也可以用三引号来写stmt。  import timeit import_module = "import random" testcode = """  def test():      return random.randint(10, 100) """ print(timeit.repeat(stmt=testcode, setup=import_module))
  但是其实都挺扯的,自己的代码会那么简单?我们是模块化编程。  测试模块中的函数
  如果你要测试的函数都在一个模块里,可以这样写timeit。  import timeit import random import arrow  # 本地函数 def stupid1():     return random.randint(1, 10)  # 依赖其他函数 def stupid2():     return stupid1()  # 依赖其他包或者模块 def stupid3():     return arrow.now()  print(timeit.timeit("stupid1()", setup="from __main__ import stupid1")) print(timeit.timeit("stupid2()", setup="from __main__ import stupid2")) print(timeit.timeit("stupid3()", setup="from __main__ import stupid3", number=100))
  写成上面这样的其实还是单行的模式。  借用default_timer
  timeit自带的default_timer可以借来用一下。  import timeit import random  def test():      return random.randint(10, 100)  starttime = timeit.default_timer() print("The start time is :",starttime) test() print("The time difference is :", timeit.default_timer() - starttime)命令行的用法
  timeit还支持命令行的调用方式,不过我觉得敲参数累的半死,没必要去尝试。  C:pythontest>python -m timeit -s "text="hello world"" 20000000 loops, best of 5: 13.1 nsec per loop分享一个案例
  2月29那天,我想今年是闰年啊,计算闰年有几种算法啊?孔乙己说有3种:  def is_leap_year_0(year):     if year % 4 == 0:         if year % 100 == 0:             if year % 400 == 0:                 return True             else:                 return False         else:             return True     else:         return False   def is_leap_year_1(year):     return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)   def is_leap_year_2(year):     if year % 400 == 0:         return True     if year % 100 == 0:         return False     if year % 4 == 0:         return True     return False
  这三种方法那种最好啊?这个不能一概而论吧,因为要看你的参数是什么,比如1991年不是闰年,方法0和方法1直接就返回了,但方法2还需要走到最后一个if才知道不是闰年。再比如2020年,方法2直接就返回了,但是方法0和1需要走到最里层的if才得到结果。所以我们需要取样测试才公平,比如从1900年到2900年,每个函数都跑10000遍。
  timeit就不太方便了,它接受的参数哪能那么复杂,我们需要包装一下。  def perf_test(method):     years = range(1900, 2900)     if method == 0:         for y in years:             is_leap_year_0(y)      if method == 1:         for y in years:             is_leap_year_1(y)      if method == 2:         for y in years:             is_leap_year_2(y)  print(timeit("perf_test(0)", setup="from __main__ import perf_test", number=10000)) print(timeit("perf_test(1)", setup="from __main__ import perf_test", number=10000)) print(timeit("perf_test(2)", setup="from __main__ import perf_test", number=10000))
  你们猜猜看哪个方法结果最好?你一定想不到。  1.6432780250906944 1.7527272370643914 0.0023122059646993876其他的思路
  timeit  其实还是太弱了,随便测测还凑合,如果真要检查性能问题还是需要用更专业的手段。比如: PyCharm Profiler  (Pro版功能)  cProfile  pycallgraph  memory_profiler

消字号备案空净搅局者?IQAir舒乐氏戴森352四款空气净化器横评前言在全球疫情肆虐的当下,国内的防疫措施已然做的非常到位了,但仍有个别人无视防疫的重要性,导致国内风险升级。在外面,我们可以佩戴口罩来阻止病毒的传播,但回到家里,总不能也戴着厚厚的你们觉得华为手机和vivo手机那个更好用呢?我这几天换了新手机本着支持国产我就买了个华为手机,我对手机要求不大,只要内存够大足够装我下载的小说就可以,然后我买回来开始看小说了就发现看个小说好困难,我真的是不知道该怎么说了。我iOS15。0beta7正式发布,ApplePay交通卡又增一批新城市时隔一周,iPhone手机又更新到iOS15beta7系统,内部版本号为19A5337a,共带来5项改进,一起来看看吧。空气质量地图恢复在上两个版本中,部分iphone出现的空气质距离iPhone13还有一月发布,四大亮点诚意满满价格真是十三香距离iPhone13发布的时间只有1个月左右了,这也让很多果粉比较关注这一次新款iPhone,作为苹果下一代旗舰手机,iPhone13虽然还没有发布,国内外各大媒体就关于它的消息爆都2021年了,学生党还不知道怎么选电脑?答案都在这了转眼间又快到了开学季,不少学生党即将踏入新的校园,同时获得新的称号大学生,而在进入大学校园之前,绝大多数学生可以说是完全不了解电脑参数。能够预见的是,在挑选电脑时即便学生党有了决定小米MIX4小米平板5系列再次开售值不值得买,应该有答案了自从雷军演讲并且发布新品之后,小米的两款新品引起了不少人的关注,他们就是小米MIX4手机以及小米平板5系列。两款产品都非常有卖点,不过也都面临着大家对小米的进一步认同。就比如小米平三个财报细节,揭密推动共富的京东密码用一句话总结京东集团2021年Q2财报,就是该高的高,该低的低。员工基数高万万没想到,京东集团今天的总员工人数已接近40万人,较去年同期新增了近12万人,京东已成为员工数最多的民营红魔运动智能手表体验佩戴轻盈外观简约,给续航竖大拇指大家好,我是酷玩小新。今天和大家聊聊智能手表。如今,智能穿戴设备发展得越来越快,也越来越火爆,市面上涌现出各式各样的智能手环和智能手表,而后者相对于前者来说,更受年轻人喜欢,这是一得心应手傲雷新一代笔灯Oampamp39penpro开箱体验前言看起来是个大哥大,其实是一支剃须刀上学的时候,看过一部香港电影,周星驰主演的国产凌凌漆。电影里,周星驰拿出了一些很有趣的特工专用工具,让荧幕前的我笑出了猪叫声。后来,虽然至今也8月10日发布的小米平板5系列?值得购买吗?值不值得定义在于产品对自己的需求上是否相匹配,如果只是奔着为了买而去买,那还谈什么值不值,直接说喜欢那就买喽!11英寸2。5K120Hz高刷LCD面板显示屏,而且还是不打孔真全面屏华为P50Pro使用一周后的体验,聊一聊优缺点先说一下购买经历,笔者的华为P50Pro是8月12日下的单,8月13日到的货,截至发稿前使用时间已经超过了一周,而在这一周的高频率使用后笔者对于华为P50Pro的各个方面也是有了较
李伯吃他汀后突发严重肝损伤,药师提醒他汀不能和这几种药混用72岁李伯吃他汀后突发严重肝损伤常见降血脂药物包括他汀类(羟甲基戊二酸单酰辅酶A还原酶抑制剂苯氧酸衍生物胆汁酸螯合剂胆固醇吸收抑制剂和烟酸,其中临床最多使用的还是他汀类降脂药,这是假如千古玦尘的芜浣拥有此秘籍,结局会不会不一样?要说今年暑假最火的仙侠剧,莫过于千古玦尘。小编是凯凯粉丝,虽然本次造型没能真正体现出我凯的帅气,但是丝毫不耽误我舔屏(狗头自保jpg)。当然配角的表现也非常精彩,尤其是张嘉倪饰演的试驾欧拉好猫GT爽就一个字!女人心跳,男人尖叫!视频加载中面向女性用户推出的车,男人能不能开?当然可以!因为一般来说,女性用户更为挑剔。把更挑剔的用户都搞定了,男人开着当然不会有任何的问题。欧拉好猫GT就是这样一款征服了女人,同56岁男子萎缩性胃炎发展成胃癌,平时烟酒不沾,医生找到了祸根56岁朱先生,没有癌症家族史,烟酒不沾,无三高,前几天消化科体检,胃镜检查发现腺体增生肠化,进一步病理检查确诊胃癌,真是晴天霹雳!因为朱先生6年前曾经单位体检,发现有幽门螺杆菌感染秋冬的第一支口红,90的女生都选择了它绝了绝了,海底捞出口红了!色号还都和火锅有关辣椒番茄黄姜色,看着颜色都好绝!来源海底捞火锅,侵删如果海底捞的口红还不能满足你,那阿宝就要献出自己喜爱的秋冬口红清单了。每一支都炒鸡好18店同庆,共创辉煌,威马汽车郑州中原中路店盛大开业金秋十月,丹桂飘香,2021年10月25日,18店同庆,共创辉煌,威马汽车郑州中原中路店盛大开业。威马汽车郑州用户中心中原中路店,是威马汽车开拓河南市场的先头军,自5月进入河南市场一代神车再进化!全新汉兰达购车手册,首推两驱尊贵版在中型SUV市场,向来是流水的擂台手,铁打的汉兰达。这个细分市场几乎只要有新车上市,无可避免地要拿汉兰达出来对标或是超越一下,这也从侧面印证了汉兰达在中型SUV市场的号召力以及在消曾经加价一车难求,如今加长寻求改变,路虎揽胜极光L还能火吗?文车魔王原创在国内一提到豪华品牌的SUV,相信大部分消费者首先想到就是BBA,可见BBA早已深入国人内心了。然而在细分豪华SUV领域,路虎也是不容忽视的一位。一提到路虎,大家首先想新手买车,5万以下能买到啥?新手驾照在握,做梦都想拥有一台自己的车,驰骋在路上,这心情过来人都懂。但预算太高的车,新手期磨合于心不忍性价比太低的车,直接浇灭内心澎湃的驾驶热情。那是否有一款可颜可甜,又能精打细透视腾讯看点非遗守艺人信息流升级为生态之争短短几秒动辄数亿不过疫情开始后的短短数月内,如火箭般蹿升的直播带货创造了一个个令人惊讶的数字的同时,也近乎将大内容行业的目光统统吸引过去。以至于很多从业者并没有关注到,曾一度引来各医生提醒体内缺乏叶酸,可能会出现4种症状,5类人群应注意补充相信经历过妊娠的女性朋友,都会对叶酸有所了解,在怀孕的时候特别是头三个月,甚至是备孕期间,医生通常都会建议补充叶酸。叶酸其实是一种维生素,只是人体所需要的多种维生素中的一种,虽然需