python编写代码避免内存增加_读书笔记(6): 编写高质量python代码的59个有效方法-完结...
前言
《编写高质量python代码的59个有效方法》这本书分类逐条地介绍了编写python代码的有效思路和方法,对理解python和提高编程效率有一定的帮助。本笔记简要整理其中的重要方法。
本次分享书中最后两章:关于协作开发和部署
7. 协作开发
编写文档字符串 docstring
Python为文档提供了内置的支持,使得开发者可以把文档于代码块关联起来。 能够在程序运行时之间访问源代码中的文档信息。
"""
This is the description of this object
"""
def __init__(self):
self.count=1
def train(self):
print('basemodel')
print(self.count)
pass
def test(self):
pass
class Model(Basemodel):
def __init__(self):
super().__init__()
self.count=2
# def train(self):
# print(self.count)
print(repr(Basemodel.__doc__))
例如这个例子,可以直接通过repr()来获取类的doc即文档信息。在编写文档字符串时,应该遵守相关规范(PEP 257):
为模块编写文档: 作为源文件的第一语句,使用三重双引号括起来; 描述本模块的用途,介绍本模块的相关操作,强调本模块比较重要的类和函数,以便于开发者能够了解该模块的用法
为类编写文档 一段话阐述本类的用途,详述类的操作方式
为函数编写文档 一句话描述本函数的功能,然后一段话描述具体行为和参数及输出
用虚拟环境隔离项目,重建依赖关系
通过pyvenv的工具构建虚拟环境,方便创建版本不同/内部软件包不同的环境
8. 部署
用模块级别的代码来配置不同的部署环境
可以根据不同的部署环境(生产/测试),覆写程序中的某些部分,根据环境不同提供不同的功能,如下例所示
还可以通过查询环境变量来确定选用模型的不同内容,下面的例子中利用sys查询当前的操作系统
repr字符串输出调试信息
print函数往往无法清晰地展示数据的类型,在调试程序时往往需要知道具体的类型,可以使用内置的repr来返回可打印的表示形式,
对于类调试,可以考虑自定义repr函数,重建该对象:
class Basemodel(object):
"""
This is the description of this object
"""
def __init__(self):
self.count=1
def train(self):
print('basemodel')
print(self.count)
pass
def test(self):
pass
def __repr__(self):
return 'test'#self.__dict__#['count']
t=Basemodel()
print(t)
用unittest测试全部代码
Python没有静态类型检查机制,编译器无法保证程序在运行时一定正确执行。Python的动态特性,阻碍了静态类型检查;此外也能方便开发者为代码编写测试。可以使用内置的unittest模块
def to_str(data):
if isinstance(data,str):
return data
elif isinstance(data,bytes):
return data.decode('utf-8')
else:
raise TypeError('Must supply str or bytes, found : %r'%data)
class UtilsTestCase(TestCase):
def test_to_str_bytes(self):
self.assertEqual('hello',to_str(b'hello'))
UtilsTestCase().test_to_str_bytes(
pdb交互调试
内置的交互调试器pdb,可以查看程序状态、打印局部变量,按照步进的方式执行程序中的每一个语句。
在需要调试的地方加上这调试命令,相当于打断点。
def test_example():
for i in range(10):
import pdb
pdb.set_trace()
print(i)
test_example()
具体的交互调试指令包括: step/next/return/continue等
性能分析
Python提供内置的性能分析工具: profiler,并将获取的性能数据通过内置的pstats模块对数据进行统计分析,对性能分析数据进行筛选和排序,提取关键的执行时长信息:
from pstats import Stats
def func(m,n):
a=b=result=1
minNI=min(n,m-n)
for j in range(0,minNI):
a=a*(m-j)
b=b*(minNI-j)
result=a//b
return result
profiler=Profile()
profiler.runcall(lambda : func(152324,27343))
stats=Stats(profiler)
stats.strip_dirs()
stats.sort_stats('cumulative')
stats.print_stats()
stats.print_callers()
因此在对python程序优化前,最好先利用profile对程序做初步的性能分析
用tracemalloc掌握内存使用及泄露情况
Python可以使用内置的gc模块,可以找到当前垃圾收集器所集的所有对象,
但gc的问题在于无法确认具体分配情况,可以使用tracemalloc来获取更详细的情况:
目前tracemalloc仅支持Python3.4以上版本
END
本人简书所有文章均为原创,欢迎转载,请注明文章出处 。百度和CSDN等站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的笔记/博文进行更新,因此请访问本人简书主页查看最新信息https://www.jianshu.com/u/40d14973d97c
python编写代码避免内存增加_读书笔记(6): 编写高质量python代码的59个有效方法-完结...相关推荐
- 文本分析软件_读书笔记:伍多库卡茨质性文本分析:方法、实践与软件使用指南...
读书笔记:伍多·库卡茨<质性文本分析:方法.实践与软件使用指南> 一.这篇文章.这本书或这篇论文的中心思想.核心观点是什么?核心观点:质性数据如何系统化分析?三大主要方法:主题分析.评估分 ...
- python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序
学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...
- python 爬取企业注册信息_读书笔记(十)——python简单爬取企查查网企业信息,并以excel格式存储...
今天这个小爬虫是应朋友,帮忙写的一个简单的爬虫,目的是爬取企查查这个网站的企业信息. 编程最终要的就是搭建编程环境,这里我们的编程环境是: python3.6 BeautifulSoup模块 lxml ...
- python程序员职业规划书_读书笔记之《程序员必读的职业规划书》
我是来填坑的, 早就忘记是什么时候什么原因关注的@Easy 的,之前就在"百度阅读"买了电子版的<程序员跳槽全攻略>,记得当时还送了鼠标垫的,5月份在又看到Easy为庆 ...
- 读书笔记之:高质量程序设计指南——C++/C
林锐博士的这本书写的非常的好,很多知识点都讲得非常透彻.是学习C++必须看的一本书. 第3章 程序的基本概念 1. 语言中的I/O接口 pic1 2. 语言的实现 pic2,3 3. 程序库 pic4 ...
- 读书笔记|《高质量读研:教你如何写论文、做科研》 张军平
前言:去年封控期间在张老师的一次学术分享讲座上知道的这本书,原本以为这本书的内容就是老生常谈,就没有太在意.后来从学弟那里借到一本张老师撰写的<爱犯错的智能体>,读来觉得很有意思,于是乎找 ...
- 读书笔记之《高质量的C-C++编程》第五章节: #define 与 const 的定义常量
常量是一种标识符,它的值在运行期间恒定不变.C 语言用 #define 来定义常量(称为宏常量).C++ 语言除了 #define (宏常量)外还可以用 const( const 常量) 来定义常量. ...
- 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...
- python中如何编写代码输入多个数据并把它们放在一个列表中去_编写高质量Python代码的59个有效方法,你用过几个...
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...
最新文章
- 论文不公开代码,应该被直接拒稿?
- 利用循环打印杨辉三角形
- sql update 日期减6个月_【干货】SQL基础快速入门
- mysql的左连接应用
- Seek the Name, Seek the Fame POJ - 2752 (理解KMP函数的失配)既是S的前缀又是S的后缀的子串
- QT信号与槽-启动系统程序以及相关控件介绍
- windows连接linux服务器并后台运行python脚本
- JPA零碎要点---JTA全局事物理解
- nginx引入自定义的配置文件
- 基类显式继承接口,类继承基类时又继承同一接口,引发接口方法混乱(显式继承接口的弊端)...
- 如何搭建大数据分析平台
- Dedecms修改TAG、title、keywords及栏目名称长度限制
- ei指什么_SCI、EI、SSCI、CSSCI分别是指什么
- 静心的全部秘密:你是观照者
- A* operator/(A*, A*)‘ must have an argument of class or enumerated type
- html修改网站图标,分享内容,分享图标等
- ios真机测试,Ineligible Devices,不可以选中真机
- Endnote X9.1 参考文献悬挂缩进
- 初次配置zookeeper——Invalid config, exiting abnormally
- Dapp 众筹项目1 合约代码编写