我想知道是否有任何快捷方式可以执行以下操作:
if a or b or c ...
do p
if a
do x
if b
do y
if c
do z
...
else
do q
是否有必要两次输入每个条件,还是有其他方法可以做到这一点?
答案 0 :(得分:2)
您的代码没有任何问题,但如果选中a
,b
或c
中的任何一个都很昂贵,您可以使用标志代替,只检查一次条件:
flag = False
if a:
flag = True
do x
if b:
flag = True
do y
if c:
flag = True
do z
do (p if flag else q)
我发现这个表格也更具可读性,因为它只有一个级别的缩进,但我想这只是一个偏好的问题......
编辑:如果必须在p
,x
,y
之前执行z
,那么您可以存储条件检查的结果代替:
doers = [x, y, z]
conditions = [check(el) for el in (a, b, c)]
do (p if any(conditions) else q)
tmp = [doers[i] for i, condition in enumerate(conditions) if condition]
(tmp
行与真正的for
循环会更加pythonic,但我知道你正在优化性能,列表理解更快......)