变量交换 >>> a, b = b, a 循环遍历区间元素 >>>for i in range(10): ... print (i) 返回的是生成器对象,生成器比列表更加节省内存 带索引位置的循环遍历 >>>colors = ['red', 'green', 'blue', 'yellow'] >>>for i, color in enumerate(colors): ... print (i, 'mapping', color) 字符串连接 >>>colors = ['red', 'green', 'blue', 'yellow'] >>>print( ', ', join( colors ) ) join 是一种更加高效的字符串连接方式,使用 + 操作时,每执行一次+操作就会导致在内存中生成一个新的字符串对象,遍历几次有几个字符串生成,造成无谓的内存浪费。而用 join 方法整个过程只会产生一个字符串对象。 打开/关闭文件 >>>with open('data.txt') as f: ... data = f.read() 列表推导式 result = [] for i in range( 10 ): s = i * 2 result.append( s ) 应该写成: [ i * 2 for i in range( 10 ) ] 1 装饰器 装饰器可以把与业务逻辑无关的代码抽离出来,让代码保持干净清爽,而且装饰器还能被多个地方重复利用。比如一个爬虫网页的函数,如果该 URL 曾经被爬过就直接从缓存中获取,否则爬下来之后加入到缓存,防止后续重复爬取。 def web_lookup(url, saved={}): if url in saved: return saved[url] page = urllib.urlopen(url).read() saved[url] = page return page pythonic import urllib.request 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() 列表的操作 列表对象(list)是一个查询效率高于更新操作的数据结构,比如删除一个元素和插入一个元素时执行效率就非常低,因为还要对剩下的元素进行移动 names = ['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie'] names.pop(0) names.insert(0, 'mark') pythonic from collections import deque names = deque(['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie']) names.popleft() names.appendleft('mark') deque 是一个双向队列的数据结构,删除元素和插入元素会很快 序列解包 p = 'vttalk', 'female', 30, 'python@qq.com' name = p[0] gender = p[1] age = p[2] email = p[3] pythonic name, gender, age, email = p