Python这样写更高效
- 1.变量交换
a, b = b, a
- 2.循环遍历区间元素
for i in xrange(6): print i2
xrange 返回的是生成器对象,生成器比列表更加节省内存,不过需要注意的是 xrange 是 python2 中的写法,python3 只有 range 方法,特点和 xrange 是一样的。
- 3.带有索引位置的集合遍历
for i, color in enumerate(colors): print i, '--->', color
- 4.字符创连接
print ', '.join(names)
join 是一种更加高效的字符串连接方式,使用 +
操作时,每执行一次+
操作就会导致在内存中生成一个新的字符串对象,遍历8次有8个字符串生成,造成无谓的内存浪费。而用 join 方法整个过程只会产生一个字符串对象。
- 5.列表推导式
[i2 for i in xrange(10)]
- 6.善用装饰器
def web_lookup(url, saved={}): if url in saved: return saved[url] page = urllib.urlopen(url).read() saved[url] = page return page # 以上部分是不使用装饰器的代码示例,装饰器代码从这里开始 import urllib #py2 #import urllib.request as urllib # py3 def cache(func): saved = {} def wrapper(url): if url in saved: return saved[url] else: page = func(url) saved[url] = page return page return wrapper @cache def web_lookup(url): return urllib.urlopen(url).read()
装饰器可以把与业务逻辑无关的代码抽离出来,让代码保持干净清爽,而且装饰器还能被多个地方重复利用。比如一个爬虫网页的函数,如果该 URL 曾经被爬过就直接从缓存中获取,否则爬下来之后加入到缓存,防止后续重复爬取。
用装饰器写代码表面上感觉代码量更多,但是它把缓存相关的逻辑抽离出来了,可以给更多的函数调用,这样总的代码量就会少很多,而且业务方法看起来简洁了。
- 7.合理使用列表
列表对象(list)是一个查询效率高于更新操作的数据结构,比如删除一个元素和插入一个元素时执行效率就非常低,因为还要对剩下的元素进行移动
deque 是一个双向队列的数据结构,删除元素和插入元素会很快
from collections import deque names = deque(['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie']) names.popleft() names.appendleft('mark')
- 8.序列解包
p = 'vttalk', 'female', 30, 'python@qq.com' name, gender, age, email = p
- 9.遍历字典
for k, v in d.iteritems(): print k, '--->', v
iteritems 返回迭代器对象,可节省更多的内存,不过在 python3 中没有该方法了,只有 items 方法,等值于 iteritems。
- 10.打开文件
with open("xx.txt") as f: f.read()
文件在结束时会自动关闭