Python 减少循环层次和缩进技巧

2015 年 5 月 8 日
 tanteng

原文: http://www.tantengvip.com/2015/05/python-for-level/
6092 次点击
所在节点    Python
25 条回复
Septembers
2015 年 5 月 8 日
这图,这不算技巧把,这个逻辑优化在任何语言上都适用
greatyao
2015 年 5 月 8 日
good
yukirock
2015 年 5 月 8 日
```
if is_for_sale(item) && compute_cost(item) > wallet.money:
buy(item)
```
laotaitai
2015 年 5 月 8 日
我觉得第一个易读.
mimzy
2015 年 5 月 8 日
感谢分享。写 C# 的时候 Resharper 有一个自选的功能叫 Invert "if" statement to reduce nesting,和楼主说的应该是同样的道理。
donghouhe
2015 年 5 月 9 日
@yukirock 大哥你二了,用and不是&&吧
我也来个
```
if all( is_for_sale(item), compute_cost(item) > wallet.money ): buy(item)
```
chevalier
2015 年 5 月 9 日
<代码大全>里面专门有教这个,把多个嵌套的循环/判断改写的可读性好
zhengkai
2015 年 5 月 9 日
是的,真有心想以编程为职业的话,还是去看下《代码大全》吧,这本书不会让你得到什么深奥的计算机知识,都是些基本常识,我觉得具备常识和不具备常识的人之间沟通是有障碍的。明明是花一个月时间就能整本书几百页看完都掌握的了知识,却要隔三差五去把其中的零碎的只言片语当成什么花哨技巧,从而一辈子都没法去学完

《代码大全》讲了减少缩进有很多种方法,还比方说,没有循环的情况下,如果 if 层数太多,可以加个 do { ... } while (false) ,然后每个 if 里都是 break
powergx
2015 年 5 月 9 日
代码短,好看 != 性能好

把自己当成解释器跑人脑跑一边就知道了
geeklian
2015 年 5 月 9 日
为了代码的可读性,可维护性,应该优先选择接近业务逻辑和自然语言的,而不是代码好看。
ryd994
2015 年 5 月 9 日
其实性能上是一样的
层数多又不影响大O
puncsky
2015 年 5 月 9 日
Code Complete +1
billgreen1
2015 年 5 月 9 日
不应该用列表推导式吗?
[by(item) for item in items if is_for_sale(item) and compute_cost(item)<= wallet.money]
erik0
2015 年 5 月 9 日
教你学用continue
tanteng
2015 年 5 月 9 日
@chevalier 这个例子是否是对的
yukirock
2015 年 5 月 9 日
@donghouhe
多謝指正
不過 all() 有類似 and 的 Short-circuit evaluation 麼?
lilydjwg
2015 年 5 月 9 日
@yukirock 必然有的嘛。
Gandum
2015 年 5 月 9 日
一猜就是continue
handleyan
2015 年 5 月 9 日
楼主好不容易在编程的世界里迈出了可贵的一步,你们就不能给点掌声吗?谁当年不是这么一步一步过来的,楼主加油!
ctexlive
2015 年 5 月 9 日
这个代码唯一好处就是改进了缩进样式。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189619

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX