您的位置:首页 > 编程语言 > Python开发

python参考手册--第10、11章执行环境、调试

2014-02-25 18:41 537 查看

1.解释器选项和环境

python [options] [-c cmd | filename | - ] [args]

例如:python -m pdb test.py

以脚本的形式运行库模块pdb

2.交互模式

-i可进行交互模式,交互模式下的运行结果保存在_中

>>>7+3

>>>_+2

12

3.文档字符串和doctest模块

函数、类、模块第一行通常用'''************'''作为文档字符串来给出描述信息。包含文档字符串被认为是一种良好的编程风格。

doctest模块:

doctest.testmod(moduleName)在指定的模块上运行测试,返回测试失败的数量和执行的测试总数。

使用doctest会产生很长和负责的文档字符串,建议使用unittest

4.unittest模块

可以单独建一个测试文件,也可在原来文件上附件上测试类,通过在__main__入口处引导进入单元测试,单元测试会执行单元测试类的所有test开头的方法。

5.pdb模块

1)启动调试器:

pdb.run('moduleA.start()')

2)命令行启动调试器:

python -m pdb moduleA.py

6.profile模块

profile和cprofile模块用于收集探测信息

python -m cprofile moduleA.py

运行探测器之后将生成一个报告,显示程序耗时、函数调用、内存占用。对优化相当有帮助。

7.优化

1)时间测试

time.clock()

time.time()

timeit('a = [1,2,3,4,6]')

等进行时间消耗测试

2)内存测试

sum(sys.getsizeof(x) for x in items)

7.反汇编

from dis import dis

dis(spilt)

8.程序优化思路

1)利用二八定律(帕累托定律),对程序中耗时最多的那部分代码进行时间分析、内存分析,重点优化。

2)不要添加额外的层:不要用dict('name':'jack','age':29) 这样增加了一层dict函数调用。

3)利用字典构造类和实例:

timeid(studentA = {'name':'jack','age':29})优于:timeid(studentA = Student('jack',29))

4)使用__slots__:

如果程序创建了用户定义类的大量实例,可以在类定义中使用__slots__属性。

__slots__ = ['name','age']告诉类Student的属性是['name','age']。使用__slots__ 的类会限制属性名称的设置,这种类不使用字典存储实例数据,采用更高效的数据结构,内存占用更少,访问更快。但是会破坏__dict__

5)避免使用(.)

x.name查找属性时会先在环境中查找变量x,然后再在x上查找属性name。应该先局部化变量name,sname = x.name,供以后使用。

6)异常能避免就避免:

不要在代码中对常见的情况进行异常处理,而应该用if else分支进行处理。

7)鼓励使用函数编程和迭代

8)使用装饰器和元类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: