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,可以通过该模块查看那块代码占用内存大

原文地址:https://www.cnblogs.com/shitianfang/p/12620735.html