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

  • 相关阅读:
    用Metasploit破解Mysql用户名和密码
    利用Android的UXSS漏洞完成一次XSS攻击
    Kali linux渗透测试常用工具汇总2-渗透攻击
    Kali linux渗透测试常用工具汇总1
    phantomjs模拟登录
    javascript中的面向对象
    javascript中的闭包
    Python的高级特性11:拓展基本数据类型(dict)
    Python的高级特性10:无聊的@property
    Python的高级特性9:蹩脚的多态
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3567437.html
Copyright © 2011-2022 走看看