zoukankan      html  css  js  c++  java
  • 飘逸的python

    VIM 的作者Bram Moolenaar在一篇叫高效文本编辑器的7个习惯的ppt中有这么一段话。
    Three basic steps
    1.    Detect inefficiency
    2.    Find a quicker way
    3.    Make it a habit
    1.检测哪里效率低下
    2.找到一种更快的方法
    3.养成习惯
     
    这3个步骤可谓是大道至简。放之四海而皆准。
    不止适用于vim,一样适用于python以及其他语言,也适用于现实生活。
    这简单的道理很多人都懂,但是却有很多人没有贯彻。
    一遇到性能问题就胡乱猜测,毫无目的,无针对性。
     
    性能问题也符合20/80规则。即20%的代码引起了80%的性能损耗。
    可能有很多地方可以修修补补来优化,但是却是无关痛痒的性能提升,效果不明显,还经常把代码搞的一团糟。
    感觉是不可靠的,要用数据说话。
    通过profile可以快速定位到热点。针对热点来进行优化,往往能收到奇效。
     
    python自带了profile模块。还自带用c语言写的cProfile。
    使用很简单,在命令行中 python -m cProfile xxx.py
    拿《 飘逸的python - 打印螺旋矩阵》中的代码来分析。


    其中ncalls是调用次数。
    那么tottime 跟cumtime有什么区别呢。
    cumtime即cumulative time,累积时间,包含子函数。这里说的子函数,就是在函数中调用其它的函数。
    而tottime不包含子函数的时间。
    从profile出来的结果可以看出,display_spiral()函数调用了2次,消耗了0.02秒,其它的加起来也就0.001秒,可见print输出很耗性能。
     
    几种使用方法:
    1.命令行中python -m cProfile xxx.py。
    此方法方法只能对整个文件进行profile.
     
    2.cProfile.run('statement')
    run方法的参数是python语句,比如可以是一条函数调用的语句。
    import cProfile
    cProfile . run ('display_spiral(4,4) ' )
     
    3.enable/disable
    此方法可以对某一部分代码进行profle.
    import cProfile
    p = cProfile.Profile()
    p.enable()#开始采集
    display_spiral(4,4)
    display_spiral(5,4)
    p.disable()#结束采集
    p.print_stats(sort='tottime')#打印结果


  • 相关阅读:
    团队冲刺2.7
    单词接龙
    团队冲刺2.6
    梦断代码阅读笔记02
    团队冲刺2.5
    吾日三省吾身(6)
    吾日三省吾身(5)
    周计划01(20200921-20200927)
    吾日三省吾身(4)
    吾日三省吾身(3)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3281342.html
Copyright © 2011-2022 走看看