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程序的几点建议的更多相关文章

  1. 给大家一些改善 Python 程序的 91 个建议

    读了一本还不错的书「编写高质量代码改善 Python 程序的 91 个建议」,大多数的建议是真心不错,我虽然写python也有3年多了,但是有些地方确实没去注意过,特地整理了一下,给大家参考. 我已经 ...

  2. 《编写高质量代码:改善Python程序的91个建议》读后感

    编写高质量代码:改善Python程序的91个建议  http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...

  3. 《改善python程序的91个建议》读书笔记

    推荐 <改善Pthon程序的91个建议>是从基本原则.惯用方法.语法.库.设计模式.内部机制.开发工具和性能优化8个方面深入探讨编写高质量python代码的技巧.禁忌和最佳实践. 读书就如 ...

  4. 编写高质量代码 改善Python程序的91个建议 (读后 小记)

    此书是自己好久之前买的,当时总觉得Python语言中有各种trick, 总是要自己猝不及防的掉入到陷阱之中, 看了一些资料后发现了这本书,感觉很是不错,不过可惜自己平时总是杂事太多,总是找不到整块的时 ...

  5. 读书笔记--《编写高质量代码:改善Python程序的91个建议》

      第一章 引论 建议写Pythonic式的代码,我理解为充分利用pythonAPI,用最简洁方式写出代码 1.两个变量交换: a, b = b, a 2.翻转list: a = [1, 2, 3, ...

  6. 改善Python 程序的 91 个建议

    建议1.理解Pythonic概念—-详见Python中的<Python之禅> 建议2.编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕过长 ...

  7. 改善 Python 程序的 91 个建议

    1.引论 建议1:理解Pythonic概念—-详见Python中的<Python之禅> 建议2:编写Pythonic代码 避免不规范代码,比如只用大小写区分变量.使用容易混淆的变量名.害怕 ...

  8. 摘选改善Python程序的91个建议

    1.理解Pythonic概念 Pythonic Tim Peters 的 <The Zen of Python>相信学过 Python 的都耳熟能详,在交互式环境中输入import thi ...

  9. 摘选改善Python程序的91个建议2

       62.metaclass stackflow          中文翻译    63.Python对象协议   https://zhuanlan.zhihu.com/p/26760180     ...

随机推荐

  1. CodeForces - 727E Games on a CD 字符串Hash

    题意:有n个单词,每个单词长度为k,顺时针将它们写成一个圆圈串.现在知道g个长度为k的单词,是否可以从这g个单词中选择n个形成这个圆圈串?如果有多个答案,任意输出一个. 思路 可以发现,如果枚举第一个 ...

  2. 【重磅】PRO基础版免费,是时候和ExtJS说再见了!

    三石的新年礼物 9 年了,FineUI(开源版)终于迎来了她的继任者 - FineUIPro(基础版),并且完全免费!   FineUIPro(基础版)作为三石奉献给社区的一个礼物,绝对让你心动: 拥 ...

  3. Hadoop1.x原理

    将这种单机的工作进行分拆,变成协同工作的集群,这就是分布式计算框架设计.使得计算机硬件类似于应用程序中资源池的资源,使用者无需关心资源的分配情况,从而最大化了硬件资源的使用价值.分布式计算也是如此,具 ...

  4. linux 运维 nginx服务器

    nginx(web服务器) nginx是一个高性能的http和反向代理服务器,同时也是一个imap/pop3/smtp 代理服务器比apache简单官网:http://nginx.org nginx配 ...

  5. ubuntu下动态链接库的编译和使用实例

    以下实例的环境是amd64 + ubuntu10.10 + g++ 4.4.5测试成功,在其他配置的机器上可能有一点区别.     动态库的使用方式中有两种,第一种是类似于静态库的使用,另一种我称之为 ...

  6. 第5章 PCIe总线的事务层

    事务层是PCIe总线层次结构的最高层,该层次将接收PCIe设备核心层的数据请求,并将其转换为PCIe总线事务,PCIe总线使用的这些总线事务在TLP头中定义.PCIe总线继承了PCI/PCI-X总线的 ...

  7. stm32开发之串口的调试

    总的函数如下 void USART1Configuration(void){    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Peri ...

  8. strcmp函数实现

    /* 功能:比较字符串s1和s2大小. 一般形式:int strcmp(字符串1,字符串2) 说明: 当s1<s2时,返回-1 当s1=s2时,返回 0 当s1>s2时,返回 1 即两个字 ...

  9. linux下测试磁盘的读写IO速度

    有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策. 下面是两种测试方法:(1)使用hd ...

  10. C#中的匿名函数使用,类名<T>

    C#中有个叫做"泛型"的集合,就是说只是个外壳,到底是int,string,bool还是什么类型,都可以按照自己的要求进行定义集合,所以我们用个"T"表示. 请 ...