2012-05-03 6 views
0

私はこのように、複数の条件を持っている:Pythonの:バイナリ条件

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でこれを行うことは可能ですか?ありがとう!

更新。これは、と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 

答えて

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#binarybitwiseoperations)です。これらは、基礎となるCライブラリとの一貫性のためにより多く使われていると思います。同じ方法で動作する純粋なPythonコードを書くことに反対しています。 –