• Effective python(八):部署


    一,考虑使用模块级别的代码区分生产环境和调试环境

    二,通过repr字符串来输出调试信息

    1,repr函数会根据对象返回可供打印的表示形式

    2,想要调整对象的可打印状态,可以设置__repr__属性,直接打印对象即可,或者通过__str__属性,先调用str(obj)再打印,也可以打印对象的属性print(obj.__dict__)

    三,使用unittest测试全部代码

    1,unittest模块中的TestCase提供了一些辅助方法,assertEqual可以判断两值是否相等,assetTrue可以验证Boolean表达式是否为真,assertRaises可以验证程序是否能在适当时机抛出异常

    2,除了单元测试,还有集成测试,用来验证模块之间是否能正确的互动

    四,使用pdb实现交互式调试

    1,import pdb; pdb.set_trace()执行到这行语句,程序就会暂停,执行程序的终端会转入交互式的python提示符界面,输入局部变量名称可以打印他们的值,还可以引入状态,检视全局状态等等

    五,先分析性能再优化

    1,对生成器,字符串各种操作很快,但属性访问及函数调用却很慢,不能靠直觉判断,需要用工具去分析,一个是profiler,一个是cProfile,建议用cProfile更准确,还需再使用pstats模块中的Stats类来剖析收集到的数据

    profiler=Profile()
    profiler.runcall(test)
    stats=Stats(profiler)
    stats.strip_dirs()
    stats.sort_stats('cumulative')
    stats.print_stats()
    stats.print_callers()#打印函数的调用者,并显示耗费时间
    

    六,使用tracemalloc掌握内存使用及泄漏情况

    1,可以通过该模块查看那块代码占用内存大

  • 相关阅读:
    C++ 实现简单快速排序
    LEETCODE 198. House Robber
    leetcode 174
    GIT 版本的回退
    unorderd_map 自定义键值及哈希函数的重载
    互斥锁 形成死锁实例
    leetcode 300
    LeetCode 62
    LeetCode 122
    SVN提交,强制注释
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12620735.html
Copyright © 2020-2023  润新知