前言

《编写高质量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个有效方法-完结...相关推荐

  1. 文本分析软件_读书笔记:伍多库卡茨质性文本分析:方法、实践与软件使用指南...

    读书笔记:伍多·库卡茨<质性文本分析:方法.实践与软件使用指南> 一.这篇文章.这本书或这篇论文的中心思想.核心观点是什么?核心观点:质性数据如何系统化分析?三大主要方法:主题分析.评估分 ...

  2. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  3. python 爬取企业注册信息_读书笔记(十)——python简单爬取企查查网企业信息,并以excel格式存储...

    今天这个小爬虫是应朋友,帮忙写的一个简单的爬虫,目的是爬取企查查这个网站的企业信息. 编程最终要的就是搭建编程环境,这里我们的编程环境是: python3.6 BeautifulSoup模块 lxml ...

  4. python程序员职业规划书_读书笔记之《程序员必读的职业规划书》

    我是来填坑的, 早就忘记是什么时候什么原因关注的@Easy 的,之前就在"百度阅读"买了电子版的<程序员跳槽全攻略>,记得当时还送了鼠标垫的,5月份在又看到Easy为庆 ...

  5. 读书笔记之:高质量程序设计指南——C++/C

    林锐博士的这本书写的非常的好,很多知识点都讲得非常透彻.是学习C++必须看的一本书. 第3章 程序的基本概念 1. 语言中的I/O接口 pic1 2. 语言的实现 pic2,3 3. 程序库 pic4 ...

  6. 读书笔记|《高质量读研:教你如何写论文、做科研》 张军平

    前言:去年封控期间在张老师的一次学术分享讲座上知道的这本书,原本以为这本书的内容就是老生常谈,就没有太在意.后来从学弟那里借到一本张老师撰写的<爱犯错的智能体>,读来觉得很有意思,于是乎找 ...

  7. 读书笔记之《高质量的C-C++编程》第五章节: #define 与 const 的定义常量

    常量是一种标识符,它的值在运行期间恒定不变.C 语言用 #define 来定义常量(称为宏常量).C++ 语言除了 #define (宏常量)外还可以用 const( const 常量) 来定义常量. ...

  8. 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...

  9. python中如何编写代码输入多个数据并把它们放在一个列表中去_编写高质量Python代码的59个有效方法,你用过几个...

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...

最新文章

  1. 论文不公开代码,应该被直接拒稿?
  2. 利用循环打印杨辉三角形
  3. sql update 日期减6个月_【干货】SQL基础快速入门
  4. mysql的左连接应用
  5. Seek the Name, Seek the Fame POJ - 2752 (理解KMP函数的失配)既是S的前缀又是S的后缀的子串
  6. QT信号与槽-启动系统程序以及相关控件介绍
  7. windows连接linux服务器并后台运行python脚本
  8. JPA零碎要点---JTA全局事物理解
  9. nginx引入自定义的配置文件
  10. 基类显式继承接口,类继承基类时又继承同一接口,引发接口方法混乱(显式继承接口的弊端)...
  11. 如何搭建大数据分析平台
  12. Dedecms修改TAG、title、keywords及栏目名称长度限制
  13. ei指什么_SCI、EI、SSCI、CSSCI分别是指什么
  14. 静心的全部秘密:你是观照者
  15. A* operator/(A*, A*)‘ must have an argument of class or enumerated type
  16. html修改网站图标,分享内容,分享图标等
  17. ios真机测试,Ineligible Devices,不可以选中真机
  18. Endnote X9.1 参考文献悬挂缩进
  19. 初次配置zookeeper——Invalid config, exiting abnormally
  20. Dapp 众筹项目1 合约代码编写

热门文章

  1. PHP开发_入门基础
  2. 约束优化问题的罚函数求解方法
  3. 大家学习雷锋好榜样啊~~ 帮个忙啊
  4. 浪潮服务器自研芯片,浪潮服务器承载武胜教育信息化平台
  5. 利用python制作一个雷诺数图形界面计算器并打包生成exe
  6. Linux部署的常用相关命令---笔记
  7. 三端柔型直流输电模型VSC- HVDC(MATLAB搭建)
  8. Skype是台湾繁体中文,告诉大家变成简体的办法
  9. 主机直连通信(扫盲贴)
  10. 第十二章 文件上传和下载