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

2015-05-08 23:18:58 +08:00
 tanteng

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

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

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

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

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

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

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

© 2021 V2EX