【问题标题】:Compacting an if statement压缩 if 语句
【发布时间】:2015-03-03 14:20:49
【问题描述】:

我想尽可能紧凑地编写这个 if 语句(以避免重复代码)

if length == 10 if boolean is False or length == 13 if boolean is True:

PyCharm 不喜欢的部分是

if boolean is True

它要求一个冒号。

PyCharm 不允许我运行它。如果有人对此有一个很好的紧凑解决方案吗?

【问题讨论】:

  • 我什至不知道这个条件想要表达什么。也许您只是在寻找 and 运算符?
  • 这似乎是两个问题。你应该首先问“我的陈述有什么问题?”只有在你确定了这一点之后,你才应该问“我如何让我现在工作的陈述更紧凑?”
  • if length == 13 if boolean else length == 10:?
  • @deceze:我想检查长度是否等于 10,但前提是布尔值为 false。第二部分相同,仅当布尔值为真时检查长度是否等于 13。这让我可以保存一些重复的代码。
  • @jonrsharpe:它应该只通过 if:if:if 长度 == 10 且布尔值为假或长度 == 13 且布尔值为真

标签: python if-statement


【解决方案1】:

认为你的意思是

if (not boolean and length == 10) or (boolean and length == 13):

括号不是必需的,但我认为它们有助于提高可读性。 @jonsharpe 的解决方案更短,只需计算一次 boolean,但可能更难阅读,尤其是如果您不熟悉 Python 的三元表达式。

永远不要使用 is 进行相等比较(这就是 == 的用途),但无论如何都不应将布尔类型与 TrueFalse 进行显式比较。

【讨论】:

    【解决方案2】:

    您可以使用conditional expression(也称为“三元”)更简洁地写出来:

    if length == 13 if boolean else length == 10:
    

    或者,等效地:

    if length == (13 if boolean else 10):
    

    根据文档:

    表达式x if C else y首先计算条件,Cnot x);如果 C 为真,则评估 x 并返回其值;否则,评估 y 并返回其值。

    【讨论】:

    • 哦,我喜欢第二个版本。第一个让我困惑:)
    • @TimPietzcker 好吧,如果我们编写其他人可以理解的代码,这会让我们失业!
    猜你喜欢
    • 2016-04-26
    • 2019-05-06
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2017-08-01
    • 2022-01-28
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多