【问题标题】:Can I do 3 different conditions in ternary operator?我可以在三元运算符中做 3 个不同的条件吗?
【发布时间】:2018-09-29 10:10:32
【问题描述】:

正常情况:

do_something if condition_met else do_something_else

我的情况:

do_something if condition_met elif do_something_1 else do_something_else

【问题讨论】:

  • 如果你真的想要它在下一行(而不是使用 yapfautopep8Black——我强烈建议使用其中一个,我个人的偏好是 yapf),你' 需要将整个内容括在括号中,或使用反斜杠,以指示下一行跟随当前行:请参阅stackoverflow.com/q/4172448/500207
  • @AChampion 你是对的,我有一个问题要求我对涉及 if、elif 和 else 的 3 种不同条件使用三元运算符。这是我可以提出的解决方案。下一行将有另一个三元运算符。

标签: python python-3.x conditional-operator


【解决方案1】:

您可以在 python 中链接这些三元组,但是,我不推荐它,我觉得很难阅读。

比较

a = True
b = False

c = 1 if a else 2 if b else 3

if a:
    c = 1
elif b:
    c = 2
else:
    c = 3

什么更容易阅读?把它压缩成一行值得吗?

【讨论】:

    【解决方案2】:

    这不是一件容易做到的事情,尽管可能有一些复杂的方法可以实现这一点。但是,在这种情况下使用三元组真的比简单的if..else 块有什么好处吗,即

    if condition_met:
        do_something
    else:
        print(something)
    

    在 Python 中有些常见的是存在一个复杂的单行代码来完成你想要的事情,它的可读性远低于正常方式,在这些情况下,采用更具可读性的方法几乎总是更好。

    【讨论】:

    • 我明白了。好吧,我这样做是因为我有一个问题要求我对 3 种不同的条件使用三元运算符,其中涉及 if、elif 和 else。这是我可以提出的解决方案。下一行将有另一个三元运算符。
    • 你能嵌套它们吗? IE。类似do_thing1 if condition1 else (do_thing2 if condition2 else do_thing3)?
    【解决方案3】:

    您可以将它们链接在一起,就像在 C 中使用三元运算符一样

    print ('a' if False else 'b' if False else 'c')
    

    这实际上等同于

    if False:
        char = 'a'
    else:
        if False:
            char = 'b'
        else:
            char = 'c'
    print (char)
    

    【讨论】:

    • 问题标记为 python-3.x,现在是 2018 年,您使用 pyhton 2 回答。
    • @MaxNoe 告诉 RedHat 开始支持 python 3,顺便我已经编辑了答案,你会删除你的反对票吗?
    • 这与问题无关,问题完全没问题。对标记为 python 3 的问题给出 python 2 的答案,而不是关于 red hat 的隆隆声是不好的。
    猜你喜欢
    • 2018-03-13
    • 2020-01-18
    • 2020-02-17
    • 2020-03-18
    • 2022-01-02
    • 1970-01-01
    • 2016-10-27
    • 2011-01-13
    • 2011-11-09
    相关资源
    最近更新 更多