V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
coolair
V2EX  ›  问与答

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

  •  
  •   coolair · 2016-07-27 18:03:16 +08:00 · 2358 次点击
    这是一个创建于 3074 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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'

    让各位见笑了,谢谢大家!
    12 条回复    2016-07-28 08:03:50 +08:00
    ruiwen
        1
    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
        2
    kindjeff  
       2016-07-27 18:23:42 +08:00 via iPhone
    abcdef 放数组里,用循环不停的获取 result 直到达到你想的
    aprikyblue
        3
    aprikyblue  
       2016-07-27 18:26:54 +08:00 via Android   ❤️ 1
    result = getsth(a, b) or getsth(c, d) or getsth(e, f) or None
    if result:
    return result
    else:
    print 'failed'
    aprikyblue
        4
    aprikyblue  
       2016-07-27 18:28:14 +08:00
    缩进挂了。。
    eric6356
        5
    eric6356  
       2016-07-27 18:39:50 +08:00
    我不是很赞成这么多函数写在一行里,不利于今后的维护也不便于版本控制器的追踪。
    我的建议是,因为你 if 里面 return 了,所以其实可以把所有的 else 都拿掉不写。
    这样算是比较折中吧,既好看也好懂。
    aprikyblue
        6
    aprikyblue  
       2016-07-27 19:41:47 +08:00
    如果数量再继续增多的话,比较推荐 3L 的做法
    aprikyblue
        7
    aprikyblue  
       2016-07-27 19:42:08 +08:00
    呸。。更正楼上: 2L
    veelog
        8
    veelog  
       2016-07-27 23:04:03 +08:00 via Android
    为啥不用循环
    kkzxak47
        9
    kkzxak47  
       2016-07-28 00:36:57 +08:00 via Android
    业务本身就是这样繁琐,为什么一定要求描述业务的代码“更好”。
    kkzxak47
        10
    kkzxak47  
       2016-07-28 00:38:16 +08:00 via Android
    不过我会把 else 全撤了
    angelface
        11
    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
        12
    angelface  
       2016-07-28 08:03:50 +08:00
    上面忘了说为什么这样处理会更好。这样处理主逻辑清晰,看代码的人很容易理解,并且新增条件时,可以很容易修改代码,最后可以保证在所有条件不满足时返回 failed
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5380 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 07:37 · PVG 15:37 · LAX 23:37 · JFK 02:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.