优化python程序的几点建议
1、在需要只读序列时,最好使用元组而非列表;
2、使用生成器yield,而不是创建大的元组和列表并在其上进行迭代处理;
3、尽量使用python内置的数据结构,而不实现自己的自定义结构;
4、从小字符串中产生大字符串时,不要对小字符串进行连接,而是在列表中累积,最后将字符串列表结合成一个单独的字符串;
5、如果某个对象需要多次使用属性访问,或从某个数据结构中进行访问,那么较好的做法是创建并使用一个局部变量来访问对象。
6、可使用字典对多个类似的elif分支进行简化;
functions=dict(a=add,b=edit,l=list)
functions[recieve]() 其中add(),edit(),list()为函数名,recieve为接收的参数;
7、打开读写文件用上下文管理器with语句;
下面是对python复杂语法的一点补充:
1、动态程序设计与内省函数:
__import__() 根据模块名导入模块;
delattr(obj,name) 从对象obj中删除名为name的属性;
getattr(obj,name,val) 返回对象obj中名为name的属性值,如果没有这一属性,并且给定了val参数,就返回val;
setattr(obj,name,val) 将对象obj中名为name的属性值设置为val,必要时候创建该属性;
hasattr(obj,name) 如果对象obj中有名为name的属性,就返回True;
locals() 返回当前本地上下文的字典;
globals() 返回当前全局上下文的字典;
type(obj) 返回对象obj的类型对象;
vars(obj) 以字典形式返回对象obj的上下文,如果没有给定obj,就返回本地上下文;
2、修饰器
修饰器是一个函数,接受一个函数或方法作为其唯一的参数,并返回一个新函数或方法。
一个简单的修饰器函数:
def positieResult(function):
def wrapper(*args,**kwargs):
result=function(*args,**kwargs)
assert result>=0,function.__name__+"()result isn't>=0"
return result
wrapper.__name__=function.__name__
wrapper.__doc__=function.__doc__
return wrapper
也可用functools模块的wraps函数来取代最后对函数的同步语句:
@functools.wraps(function)
def wrapper(*args,**kwargs):
...
也可在此函数的外国再包一层函数来给修饰器增加可传递参数。
3、def a() ->bool:
suite
表示对函数使用时加注释(3.5后加的新功能)
4、函子另一种包含了特殊方法__call()__的类。它提供的一个关键好处就是可以维护一些状态信息。
闭包:
def make_strip_function(characters):
def strip_function(string):
return string.strip(characters)
return strip_function
使用方法:
strip_a=make_strip_function(',:;.!?')
strip_a('ladys!') #returns:'ladys'
相当于二次传参?,下面的函子具有相同的功能和用法
class Strip:
def __init__(self,characters):
self.characters=characters
def __call__(self,string)
return string.strip(self.characters)
优化python程序的几点建议的更多相关文章
- 给大家一些改善 Python 程序的 91 个建议
读了一本还不错的书「编写高质量代码改善 Python 程序的 91 个建议」,大多数的建议是真心不错,我虽然写python也有3年多了,但是有些地方确实没去注意过,特地整理了一下,给大家参考. 我已经 ...
- 《编写高质量代码:改善Python程序的91个建议》读后感
编写高质量代码:改善Python程序的91个建议 http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...
- 《改善python程序的91个建议》读书笔记
推荐 <改善Pthon程序的91个建议>是从基本原则.惯用方法.语法.库.设计模式.内部机制.开发工具和性能优化8个方面深入探讨编写高质量python代码的技巧.禁忌和最佳实践. 读书就如 ...
- 编写高质量代码 改善Python程序的91个建议 (读后 小记)
此书是自己好久之前买的,当时总觉得Python语言中有各种trick, 总是要自己猝不及防的掉入到陷阱之中, 看了一些资料后发现了这本书,感觉很是不错,不过可惜自己平时总是杂事太多,总是找不到整块的时 ...
- 读书笔记--《编写高质量代码:改善Python程序的91个建议》
第一章 引论 建议写Pythonic式的代码,我理解为充分利用pythonAPI,用最简洁方式写出代码 1.两个变量交换: a, b = b, a 2.翻转list: a = [1, 2, 3, ...
- 改善Python 程序的 91 个建议
建议1.理解Pythonic概念—-详见Python中的<Python之禅> 建议2.编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕过长 ...
- 改善 Python 程序的 91 个建议
1.引论 建议1:理解Pythonic概念—-详见Python中的<Python之禅> 建议2:编写Pythonic代码 避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕 ...
- 摘选改善Python程序的91个建议
1.理解Pythonic概念 Pythonic Tim Peters 的 <The Zen of Python>相信学过 Python 的都耳熟能详,在交互式环境中输入import thi ...
- 摘选改善Python程序的91个建议2
62.metaclass stackflow 中文翻译 63.Python对象协议 https://zhuanlan.zhihu.com/p/26760180 ...
随机推荐
- 使用stringstream对象简化类型转换
< sstream>库定义了三种类:istringstream.ostringstream和stringstream,分别用来进行流的输入.输出和输入输出操作.另外,每个类都有一个对应的宽 ...
- uva1343 IDA*
这题需要用数组记录每个block的位置.启发函数:d+wa(8-当前最多相同个数)>maxd直接退出 AC代码: #include<cstdio> #include<cstri ...
- poj1011 && uva307 DFS + 剪枝
将木棒从大到小排列,保证每次的选择都是最长可选的木棒. 剪枝: 1 . 如果第 i 根木棒被选择却无法成功拼接,那么后面与其长度相同的也不能选择. 2 . 如果第 cnt + 1 根木棒无法成功拼接, ...
- openresty 中mime.types 文件缺失问题,无法展示图片
看技术群有人问这个:"图片不展示了,直接下载了,怎么设置nginx",之前刚开始学习nginx时遇到过,然后 使用 openresty+lua在做网关时遇到过,这里还是记录下吧. ...
- Dockerfile 编译安装mysql5.7 千万不要执行.只是记录一下编译安装罢了
开启所有核心make 20G 内存都不够玩,跑3-4个核心吧,还好. 最后的出来的镜像3G多,百思不得其解,看了官方的Dockerfile,也没什么特别,就是 apt 或者 yum.好吧,不知做了什 ...
- hibernate中的缓存问题与快照机制
1. 什么是缓存 数据存储到数据库里面,数据库本身是一个文件系统,使用流方式操作文件(效率不高) 改进方式:把数据存到内存中,不需要使用流方式,可以直接读取内存中的数据 缓存:内存中的临时数据,当内 ...
- 网络基础tcp/ip协议四
网络层的功能: 定义了基于ip协议的逻辑地址. 链接不同的媒介类型. 选择数据通过网络的最佳路劲. 数据包格式: 优先级与服务类型(8)位:优先级与服务类型 标识符,标志,段偏移量:这几个字用来对数据 ...
- JFFS2 文件系统及新特性介绍
简介: JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用.这篇文章首先分析了在闪存上使用 JFFS2 的必 ...
- HI3531网络tftp、nfs加载
ifconfig eth0 hw ether 00:00:23:34:45:66; ifconfig eth0 192.168.1.10 netmask 255.255.255.0; route a ...
- javascript 一些关于css操作的函数
// 通过样式表 获得css样式 //obj 表示dom对象,name 表示css属性 比如width等 function getStyle(obj,name){ if(obj.currentStyl ...