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)