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. web 参考网址

    https://w3c.github.io/ https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket#%E7%A4%BA%E4%BE%8B ...

  2. 开发工具类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

  3. TCP/IP读书笔记(4) IPv4和IPv6 路由选择

    TCP/IP读书笔记(4) IPv4和IPv6 路由选择 网络层是位于链路层之上,TCP/IP模型中网络层的核心协议是IP协议(Internet protocol). 目前主流的IP协议是IPv4(I ...

  4. 约瑟夫环-循环队列算法(曾微软,google笔试题)

    这也是我们聚会时常常做的游戏之一. 算法思路: 此处我使用循环链表模拟人围城一圈,每一个结点代表一个人.链表是一个有序链表,链表结点数据域是一个整型,代表人的序号.出局等同于链表删除元素,每次出局后重 ...

  5. 嵌入式linux------ffmpeg移植 解码H264(am335x解码H264到yuv420并通过SDL显示)

    /* 编译命令:arm-linux-gcc -o show2642 264showyuv2.c -I/usr/local/ffmpeg_arm/include/ -L/usr/local/ffmpeg ...

  6. Caused by: java.lang.NoClassDefFoundError: org/springframework/web/context/WebApplicationContext

    1.错误描述 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache ...

  7. MyEclipse10中配置WebLogic10

    MyEclipse10中配置WebLogic10 1.双击打开MyEclipse10,依次操作"Window--->Preferences" 2.在左侧菜单中找到" ...

  8. Linux显示以log结尾的日志文件

    Linux显示以log结尾的日志文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ find -name "*.log" find: `. ...

  9. 远程块存储iSCSI

    /* Border styles */ #table-2 thead, #table-2 tr { border-top-width: 1px; border-top-style: solid; bo ...

  10. Java语法 示例

    第二章: int:整型 double:双精度浮点型 char:字符型 String:字符串型语法:数据类型 变量名: 如:String name: 变量名=值: 如:name="张三&quo ...