锁定老帖子 主题:避免劣化的python代码
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-02
最后修改:2010-12-02
劣化代码: s = [] for i in seq: s.append(foo(i))
推荐代码: s = map(foo, seq) 更高效的代码 for i in itertools.imap(foo, seq): bar(i) 劣化代码: for i in xrange(len(seq1)): foo(seq1[i], seq2[i]) 推荐代码: for i, j in zip(seq1, seq2) foo(i, j) 更高效: for i, j in itertools.izip(seq1, seq2): foo(i, j) 劣化代码: for i in xrange(len(seq)): foo(seq[i], i) 推荐代码: for i, item in enumerate(seq): foo(item, i) 劣化代码: s = seq[:] s.reverse() for i in s: foo(i) 推荐代码: for i in reversed(s): foo(i) 劣化代码: def foo(seq, bgn, end): i=0 while(bgn < end): bar(seq[bgn], i ) bgn += 1 i += 1 def foo(seq, bgn, end): tmp_seq = seq[bgn:end] for i, item in enumerate(tmp_seq): bar(item, i) 推荐代码: def foo(seq, bgn, end): for begin, i in itertools.izip(xrange(bgn, end), itertools.counter()): bar(seq[begin], i) 劣化代码: for i in seq: if pred(i): foo(i) 推荐代码: for i in itertools.ifilter(pred, seq): foo(i) 如果你又更好的方案,请继续补吧。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-02
http://docs.python.org/dev/howto/index.html 这里又一些常用的python 文档。其中又一篇介绍关于python排序的功能和函数编程,很不错。
http://docs.python.org/dev/howto/sorting.html |
|
返回顶楼 | |
发表时间:2010-12-03
我觉得出现这种所谓的劣化代码,很大程度上是对Python的函数库和类库的不熟悉,还有就是自己以前其他语言的思考方式的影响。
|
|
返回顶楼 | |
发表时间:2010-12-03
魔力猫咪 写道 我觉得出现这种所谓的劣化代码,很大程度上是对Python的函数库和类库的不熟悉,还有就是自己以前其他语言的思考方式的影响。 对呀,判断一个pythoner的程度,就看这些实例,以及对很多函数库的理解 |
|
返回顶楼 | |
发表时间:2010-12-03
从另一个角度看,推荐代码好多语法糖
|
|
返回顶楼 | |
发表时间:2010-12-03
动态语言之所以效率高,很大程度上就是因为有很多节约敲字的语法糖。合适的语法糖可以大大提高效率和代码可读性。
|
|
返回顶楼 | |
发表时间:2010-12-03
第一个用列表解析更高效
另,如果想少敲字,itertools.izip,itertools.imap,itertools.ifilter换成zip、map、filter能少敲很多,迭代器又不比列表高效多少 |
|
返回顶楼 | |
发表时间:2010-12-03
正在学python ,收藏一下,以后尽量先用官方库写
|
|
返回顶楼 | |
发表时间:2010-12-04
最后修改:2010-12-04
没明白到底好在哪里,就是好在python口音比较地道?
我只懂得丁点python,期待解惑 |
|
返回顶楼 | |
发表时间:2010-12-04
劣化代码:
>>> a = ['a','b','c'] >>> for x in a: ... print a.index(x),x ... 0 a 1 b 2 c >>> 推荐代码: >>> a = ['a', 'b', 'c'] >>> for index, item in enumerate(a): print index, item ... 0 a 1 b 2 c >>> |
|
返回顶楼 | |