我正在寻找缩短正常if else
陈述的方法。
我找到的格式之一是改变这个:
if x == 1:
print("Yes")
else:
print("No")
进入这个:
print("Yes") if x == 1 else print("No")
上面的代码是pythonic吗?否则,什么是缩短if else
语句的pythonic方法?
我也尝试使用return
代替print
。我试过了
return total if x == 1 else return half
导致第二个return
无法访问的语句。有没有办法让我无法看到?
最后,我尝试使用else if
代替else
代码,但这也不会有效。
print(total) if x == 1 else print(half) if x == 2
上面的代码可能看起来很愚蠢。我错过了正确的格式,或者是否真的无法使用此格式执行return
和else if
?
答案 0 :(得分:3)
您是否尝试在打印本身中使用三元组?
print("Yes" if x == 1 else "No")
答案 1 :(得分:3)
表格
print("Yes") if x == 1 else print("No")
通常不被认为是Pythonic,因为... if ... else ...
是一个表达式,并且你丢弃了表达式产生的值(总是None
)。你可以使用Pythonic print("Yes" if x == 1 else "No")
,因为条件表达式的值被用作print
的参数。
表格
return total if x == 1 else return half
无法工作,因为return
是一个语句,必须出现在逻辑行的开头。相反,使用
return total if x == 1 else half
(解析与return (total if x == 1 else half)
相同)。
代码
print(total) if x == 1 else print(half) if x == 2
也不起作用 - 条件表达式为... if ... else ...
,即每个if
必须与其后的else配对;你的第二个if
缺少else
条款;你可以用
print(total) if x == 1 else print(half) if x == 2 else print('something else')
同样,这不会被认为是非常pythonic;但你可以使用
print(total if x == 1 else half if x == 2 else 'something else')
并不是说它会好得多。
最后,如果您正在参加代码高尔夫
print("Yes" if x == 1 else "No")
可以缩短为
print(('No', 'Yes')[x == 1])
使用True == 1
和False == 0
这一事实并使用它们来索引元组。
答案 2 :(得分:1)
三元if..else
对表达式进行操作。 return
是一个陈述,而不是表达。 print()
是一个表达式,但请注意你写两次的方式 - 你打印不管;它只是您想要打印的表达式可能会有所不同。
print("Yes") if x == 1 else print("No")
以上是有效的,但您不需要对同一个函数有两个引用:
print("Yes" if x == 1 else "No")
以下内容无效,因为您有多个语句:
return total if x == 1 else return half
再次,对你想要使用的表达式进行操作:
return total if x == 1 else half
现在,三元就是那个 - 三元。它应该有三个部分,而不是四部分。
print(total) if x == 1 else print(half) if x == 2
在上面,你有四个表达式:
print(total)
x == 1
print(half)
x == 2
那太多了。你可以让其中一个表达式本身是一个更大的表达式,尽管它总是需要一个else
(三元组):
print(total if x == 1 else half if x == 2 else 'Neither 1 nor 2.')
使用更多括号显示分组:
print(total if x == 1 else (half if x == 2 else 'Neither 1 nor 2.'))
上面内括号中的表达式是一个带有三元运算符本身的表达式,以及带有三元运算符的较大表达式中的表达式。