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


    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)使用装饰器和元类

  • 相关阅读:
    用户需求与抱怨的理解:重视用户所关注的核心利益
    有效的沟通,从聆听开始
    Forms 身份验证下“诡异”的Cookie 丢失问题
    Q 语言初学者系列:(2)基本数据类型
    Q 语言初学者系列:(1)开门篇
    熟悉的感觉
    将.NET Entity Framework 的 Cache模块移植到JAVA平台
    [JAVA]你见过这样的switch吗?
    网站上图片"另存为" 为什么是 bmp 格式
    KDB+性能分析:内存篇
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3567437.html
Copyright © 2020-2023  润新知