代码这样写更优雅(1)
2017-06-22 13:35 很大很老实 阅读(327) 评论(0) 编辑 收藏 举报这个文章是转载的,通过优雅的代码,可以提现python的优美和我们的能力,后续不定期的更新:
1)变量交换:
a,b=b,a
2)循环遍历:
一般人都写:for i in range(6):,实际上,这么写算不错了,但是,更优美的写法:
for i in xrange(6): (print i)
这个所谓更优美,就是在python2中,在3中,都是range了
3)带有索引位置的集合遍历:
colors = ['red', 'green', 'blue', 'yellow'] for i, color in enumerate(colors): print (i, '--->', color)
如果要统计文件的行数,可以这样写:
count = len(open(filepath, 'r').readlines())
- 1
- 1
这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。
可以利用enumerate():
count = -1
for index, line in enumerate(open(filepath,'r')):
count += 1
4) 打开和关闭文件:
with open('data.txt') as f: data = f.read()
5)字符串链接:
names = ['raymond', 'rachel', 'matthew', 'roger',
'betty', 'melissa', 'judith', 'charlie']
print (', '.join(names))
join 是一种更加高效的字符串连接方式,使用 +
操作时,每执行一次+
操作就会导致在内存中生成一个新的字符串对象,遍历8次有8个字符串生成,造成无谓的内存浪费。而用 join 方法整个过程只会产生一个字符串对象。
6)列表推导式:
result=
[i*2 for i in xrange(10)]
等价于:
result = [] for i in range(10): s = i*2 result.append(s)
7)善用装饰器
装饰器可以把与业务逻辑无关的代码抽离出来,让代码保持干净清爽,而且装饰器还能被多个地方重复利用。比如一个爬虫网页的函数,如果该 URL 曾经被爬过就直接从缓存中获取,否则爬下来之后加入到缓存,防止后续重复爬取。
一般写法:
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()
用装饰器写代码表面上感觉代码量更多,但是它把缓存相关的逻辑抽离出来了,可以给更多的函数调用,这样总的代码量就会少很多,而且业务方法看起来简洁了。
.