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

python参考手册--第10、11章执行环境、调试的更多相关文章

  1. 《python参考手册(第四版)》【PDF】下载

    <python参考手册(第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382222 内容介绍 本书是权威的Python语 ...

  2. Python核心编程读笔 13:执行环境

    第14章  执行环境 一.可调用对象 python有四种可调用对象:函数.方法.类.一些类的实例 1 函数 (1)内建函数(BIF) BIF是用c/c++写的,编译后放入python解释器,然后把它们 ...

  3. python参考手册--第1章python简介

    1.if __name__ == '__main__': 直接运行myModel.py时,当前模块的名字是main:import myModel然后运行的时候当前模块的名字是myModel. 2.ev ...

  4. python参考手册--第4、5、6、7章

    1.zip zip(s,t):将序列组合为一个元组序列[(s[0],t[0]), (s[1],t[1]), (s[2],t[2]), (s[3],t[3]),...] >>> s = ...

  5. python参考手册--第8章

    1.模块和import (1)首次import module会做以下3件事: a)创建新的命名空间,用作在该源文件中定义的所有对象的容器.在模块中定义的函数和方法在使用global语句时将访问该命名空 ...

  6. python参考手册--第3章类型和对象

    1.对象的身份.类型.值 (1)身份:对象在内存中位置的指针,地址值, >>> a = [1,2,3,4,5] >>> id(a)48497328 >> ...

  7. python参考手册--第9章

    1.读取命令行选项 (1)sys.args python启动时,命令行选项设置在列表sys.args中. sys.args[0]:xxx.py sys.args[1:]: 其他参数 (2)optpar ...

  8. python参考手册--第2章词汇和语法约定

    1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...

  9. Debian 参考手册之第6章Debian档案库

    来源:https://www.debian.org/doc/manuals/debian-faq/ftparchives#oldcodenames 第 6 章 Debian 档案库 目录 6.1. 有 ...

随机推荐

  1. SharpDevelop 编译时,任务失败,因为未找到“resgen.exe”的解决方法

    在git clone sprite的项目,在本地编译的时候,会出现 任务失败,因为未找到“resgen.exe”,或未安装正确的 Microsoft Windows SDK.任务正在注册表项 HKEY ...

  2. postgresql 将同一个字段的值组合和将多个字段的值组合

    多字段值根据连接符拼接 concat_ws(':',aaa,bbb) 单字段值根据连接符拼接 string_agg(ccc,' \r\n ') 如果要将多个字段的值拼接成一个: string_agg( ...

  3. Oracle查询慢, 特别是更新慢问题

    近期, 客户发现查询比较慢, 特别是更新更慢. 原来是oracle listerner log太大导致.  (C:\app\Administrator\diag\tnslsnr\ServerName\ ...

  4. iOS开发——百度云推送

    由于公司项目是集成的极光推送,详见下一篇博客. 集成百度推送大体相当,最好都参考官方文档集成,官方文档或官方网站教程是最好的博客. 百度Push服务SDK用户手册(iOS版) http://push. ...

  5. Razor引擎学习:RenderBody,RenderPage和RenderSection

    ASP.NET MVC 3 已经正式发布了,现在估计许多人都在拼命学,我也不能例外,刚刚看到了一篇文章,介绍了三个非常有用的方法:RenderBody,RenderPage和RenderSection ...

  6. JavaScript学习笔记(6)——JavaScript语法之对象

    JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. 属性是与对象相关的值. 方法是能够在对象上执行的动作. 提示: ...

  7. vmware以及schlumberger题解

    先是vmare的:具体的题目我就不描述了. 1. 贪吃的小明.直接数个数,统计个数,就可以完成.使用map,应该输入implement这一类,我认为很简单,但是我只过了33%. /* ID: y119 ...

  8. Curl的编译

    下载 curl的官网:https://curl.haxx.se/ libcurl就是一个库,curl就是使用libcurl实现的. curl是一个exe,也可以说是整个项目的名字,而libcurl就是 ...

  9. [翻译][MVC 5 + EF 6] 8:更新相关数据

    原文:Updating Related Data with the Entity Framework in an ASP.NET MVC Application 1.定制Course的Create和E ...

  10. leetcode Insert Interval 区间插入

    作者:jostree  转载请注明出处 http://www.cnblogs.com/jostree/p/4051169.html 题目链接:leetcode Insert Interval 使用模拟 ...