Python:二进制条件
我有多种情况,比如:Python:二进制条件,python,conditional,flags,Python,Conditional,Flags,我有多种情况,比如: if condition: flag1 = True flag2 = testfunc() flag3 = bool(variable) if not flag1 and not flag2 and not flag3: do0 elif flag1 and flag2: do1 elif flag2 and flag3: do2 flags = 0 if condition: flags += 1 if testfunc(): flags +=
if condition:
flag1 = True
flag2 = testfunc()
flag3 = bool(variable)
if not flag1 and not flag2 and not flag3:
do0
elif flag1 and flag2:
do1
elif flag2 and flag3:
do2
flags = 0
if condition:
flags += 1
if testfunc():
flags += 2
if bool(variable):
flags += 4
if flags == 0:
do0
elif flags == 3:
do1
elif flags == 6:
do2
我能把它改成这样吗:
if condition:
flag1 = True
flag2 = testfunc()
flag3 = bool(variable)
if not flag1 and not flag2 and not flag3:
do0
elif flag1 and flag2:
do1
elif flag2 and flag3:
do2
flags = 0
if condition:
flags += 1
if testfunc():
flags += 2
if bool(variable):
flags += 4
if flags == 0:
do0
elif flags == 3:
do1
elif flags == 6:
do2
正如您所理解的,可以有值0、1、2、4、8、16、32。。。条件。可以在Python中执行类似的操作吗?谢谢
更新。这类似于re
和PyQt4
模块中的条件(您可以在其中设置re.UNICODE
|re.DOTALL
)
re
模块中的示例:
DOTALL = 16
I = 2
IGNORECASE = 2
L = 4
LOCALE = 4
M = 8
MULTILINE = 8
S = 16
U = 32
UNICODE = 32
VERBOSE = 64
X = 64
是的,这是完全有可能做到的-您的代码应该按原样运行良好(声明了给定的变量和函数) 这是个好主意吗?不是真的——当你读到你的意思时,它就不那么明显了。可读性是第一位的 如果您的问题是大量的
和
s,那么您可以通过其他方式进行清理:
if not any(condition, flag2, variable):
使用
any()
和all()
通常可以帮助您简化事情。哇,这似乎非常有用。我将把它投入使用!然而,PyQt4和re的创建者似乎使用了我所要求的方式。就教育而言,了解如何获得这样的东西是很有用的。他们使用位来实现这一点吗?@ghostmansd这些是-我认为它们更多地用于与底层C库的一致性,并反对编写以同样方式工作的纯python代码。