2012-05-03 5 views
0

나는이 같은 여러 조건이 있습니다파이썬 : 이진 조건

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, ... 조건. 파이썬에서 이런 일을 할 수 있습니까? 감사!

업데이트. 이것은 rePyQt4 모듈의 조건과 같습니다 (여기서 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 

답변

2

예, 그것은이 일을 완벽하게 가능 - 코드가 잘 실행한다 (주어진 변수와 함수가 선언 된 상태).

좋은 생각인가요? 실제로는 - 당신이 의미하는 것을 읽을 때 훨씬 덜 분명합니다. 가독성이 우선입니다. 문제가 and의의 많은 경우

, 당신은 다른 방법으로 그것을 청소 할 수 종종 당신이 일을 단순화 할 수 any()all()를 사용

if not any(condition, flag2, variable): 

.

+0

와우, 매우 유용하게 보입니다. 나는 그것을 받아 들일 것이다! – ghostmansd

+0

그러나 PyQt4 및 re의 작성자는 내가 묻는 방식을 사용하는 것으로 보입니다. 교육을 위해서 이런 식으로하는 법을 이해하는 것이 유용 할 것입니다. 그들은 이것을 위해 비트를 사용 했습니까? – ghostmansd

+0

@ghostmansd 이들은 [비트 단위 연산자] (http://docs.python.org/reference/expressions.html#binary-bitwiseoperations)입니다. 기본 C 라이브러리와의 일관성을 위해 더 많이 사용한다고 가정합니다. 똑같은 방식으로 작동하는 순수 파이썬 코드를 작성하는 것에 반대합니다. –