这样的逻辑判断怎么写更好?( Python)

2016-07-27 18:03:16 +08:00
 coolair
result = getsth(a, b)
if result :
....return result
else:
....result = getsth(c, d)
....if result:
........return result
....else:
........result = getsth(e, f)
........if result:
............return result
........else:
............print 'failed'

让各位见笑了,谢谢大家!
2331 次点击
所在节点    问与答
12 条回复
ruiwen
2016-07-27 18:23:11 +08:00
//java version
boolean result = getsth(a, b) || getsth(c, d) || getsth(e, f);

if (!result)
log("failed");

return result;
kindjeff
2016-07-27 18:23:42 +08:00
abcdef 放数组里,用循环不停的获取 result 直到达到你想的
aprikyblue
2016-07-27 18:26:54 +08:00
result = getsth(a, b) or getsth(c, d) or getsth(e, f) or None
if result:
return result
else:
print 'failed'
aprikyblue
2016-07-27 18:28:14 +08:00
缩进挂了。。
eric6356
2016-07-27 18:39:50 +08:00
我不是很赞成这么多函数写在一行里,不利于今后的维护也不便于版本控制器的追踪。
我的建议是,因为你 if 里面 return 了,所以其实可以把所有的 else 都拿掉不写。
这样算是比较折中吧,既好看也好懂。
aprikyblue
2016-07-27 19:41:47 +08:00
如果数量再继续增多的话,比较推荐 3L 的做法
aprikyblue
2016-07-27 19:42:08 +08:00
呸。。更正楼上: 2L
veelog
2016-07-27 23:04:03 +08:00
为啥不用循环
kkzxak47
2016-07-28 00:36:57 +08:00
业务本身就是这样繁琐,为什么一定要求描述业务的代码“更好”。
kkzxak47
2016-07-28 00:38:16 +08:00
不过我会把 else 全撤了
angelface
2016-07-28 07:57:56 +08:00
@kkzxak47 赞同

典型的嵌套条件,须要使用 guard clauses 替换:
result = getsth(a, b)
if result :
....return result

result = getsth(b, d)
if result:
.... return result
..
..
..
angelface
2016-07-28 08:03:50 +08:00
上面忘了说为什么这样处理会更好。这样处理主逻辑清晰,看代码的人很容易理解,并且新增条件时,可以很容易修改代码,最后可以保证在所有条件不满足时返回 failed

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

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

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

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

© 2021 V2EX