首页 > 为何说这段代码很难看,怎么能变得pythonic?

为何说这段代码很难看,怎么能变得pythonic?

sum = 0
for i in range(len(num_list)):
sum += num_list[i]

看到有大神吐槽这段代码,形容看到它如同见到它有种看见douban变成约炮网站的悲哀。

学了python一段时间,确实能体会到Python的简洁清晰,但很多时候,总有种自己在用另一套语法来写C++,写Shell的感觉。

比如:交换数据 a, b = b, a,下意识的会想着用一个temp变量来操作, a = temp; a = b; b = temp;

请大家建议如何能写的更pythonic,有没有什么进阶的路线,博客,书籍推荐。

谢谢GeauxEric提醒


难道我会告诉你在C++里面交换数据我会用:

int a = 3, b = 4;
pair<int&, int&>(b, a) = make_pair(a, b);

累加数我会用:

vector<int> v = {1, 2, 3, 4, 5};
int sum = accumulate(v.begin(), v.end(), 0);

简直优雅得无法直视啊有木有!!!好吧已经不是在说Python了. 折叠我吧. 我只是想告诉题主, C++也有cplusplus-ful的一面, far beyond textbooks的一面.


my_sum = reduce(lambda x, y: x+y, num_list)

要解释吗?

要变得pythonic也没什么东西看一下就行了,就是要把python built-in的一些东西吃透,我也正在吃之中。


my_sum = sum(num_list)


关于 pythonic

推荐一在线电子书 《The Little Book of Python Anti-Patterns》

还有一篇 blog 30 Python Language Features and Tricks You May Not Know About


pythonic的代码应该简洁易懂,方便查看。一段代码一眼看过去,没有多余的累赘,没有难看的缩进。并不是多用些python内置函数就pythonic了。Lowky的回答很不错。这里不必要用range,这是冗余的。另外如果用range请用xrange,它返回一个迭代器,比range要好
遍历list,不要采用这种方法。如果不需要索引值就用Lowky的,需要的用enumrate,除非你想遍历中修改这个list,这时大多是从后序遍历


GeauxEric那个不错,我第一想法是有点装X的。。。

my_sum = sum(i for i in number_list)

可以更简洁一点,还有就是循环内的条件记得缩进。

sum = 0
for i in num_list:
    sum += i

for item in num_list:
    sum += item

另外一些函数如len()等,不要放在循环中,代码规模大了,很耗时间
length = len(xxx)
【热门文章】
【热门文章】