zoukankan      html  css  js  c++  java
  • 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)使用装饰器和元类

  • 相关阅读:
    【web前端】面题整理(2)
    【web前端】前段时间的面题整理(1)
    【js】什么是函数节流与函数去抖
    【感想文】对于情绪管理,我的感悟。
    【感想文】现代人的恋爱,已经不再是过去的一生只爱一个人了
    【插件】哔哩哔哩专栏区-文章朗读插件安装
    【js】版本号对比处理方案
    【js】了解前端缓存,收获不止于此!
    【js】关于this指针-理解call、apply、bind
    【读后感】爱的五种能力
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3567437.html
Copyright © 2011-2022 走看看