Python 压缩if语句

Python 压缩if语句,python,if-statement,Python,If Statement,我想把这个if语句写得尽可能紧凑,以避免重复代码 if length == 10 if boolean is False or length == 13 if boolean is True: PyCharm不喜欢的部分是 if boolean is True 它需要一个冒号 PyCharm不允许我运行它。有人有一个很好的紧凑解决方案吗?我想你是说 if (not boolean and length == 10) or (boolean and length == 13): 括号不是必需

我想把这个if语句写得尽可能紧凑,以避免重复代码

if length == 10 if boolean is False or length == 13 if boolean is True:
PyCharm不喜欢的部分是

if boolean is True
它需要一个冒号

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

我想你是说

if (not boolean and length == 10) or (boolean and length == 13):
括号不是必需的,但我认为它们有助于可读性@jonsharpe的解决方案甚至更短,只需计算布尔值一次,但可能更难阅读,特别是如果您不熟悉Python的三元表达式

Never use is for equality comparison,这就是==的作用,但是无论如何,布尔类型都不应该显式地与True或False进行比较。

您可以使用也称为三元的表达式更简洁地写出它:

if length == 13 if boolean else length == 10:
或者,相当于:

if length == (13 if boolean else 10):
根据文件:

表达式x if C else y首先计算条件,C不是x;如果C为true,则计算x并返回其值;否则,将计算y并返回其值


我甚至不知道这个条件想要表达什么。也许你只是在找and接线员?这好像是两个问题。你应该先问我的陈述有什么问题?只有在你确定了这一点之后,你才应该问我如何使我现在的工作语句更紧凑?如果长度=13,如果布尔值,否则长度=10:?@deceze:我想检查长度是否等于10,但只有当布尔值为false时。与第二部分相同,仅当布尔值为true时,才检查长度是否等于13。这允许我保存一些重复的代码。@jornsharpe:它应该只传递if:如果length==10和boolean都为false,或者length==13和boolean都为true,那么我喜欢第二个版本。第一个问题让我困惑:@TimPietzcker好吧,如果我们写代码,其他人都能理解,那我们就失业了!