2016-08-04 4 views
0

Ich habe sowohl hier als auch mit Google gesucht. Das | (Pipe) Symbol ist der bitweise OR-Operator, aber ich kann nichts speziell für mein Problem finden. Hier ist ein example aus dem Cinema4D Python SDK und hat ein Argument Flags, wo Sie mehrere IDs getrennt durch die | festlegen können Symbol.Python: Wie kann ich auf IDs zugreifen, die durch | getrennt sind (Rohr) in einem Argument

Was ist das speziell und wie greife ich auf die IDs in der Funktion unten?

ID_OK = 100 
ID_CANCEL = 101 

def Func(flags): 
    print flags 
    return 

Func(ID_OK|ID_CANCEL) 

.. 

>> 101 

Vielen Dank.

Antwort

0

Flags wie diese werden manchmal als „Bit-Masken“ genannt. Wenn Sie sie als hexadezimal definieren, werden sie viel einfacher zu verwenden sein.

Sie können die Binärzahl & verwenden, um festzustellen, ob das Flag gesetzt ist. Zum Beispiel:

ID_OK = 0x01 
ID_CANCEL = 0x10 

def Func(flags): 
    print "0x%02x" % (flags) 
    if flags & ID_OK: 
     print "ID_OK" 
    if flags & ID_CANCEL: 
     print "ID_CANCEL" 

    print 
    return 

Func(ID_OK) 
Func(ID_CANCEL) 
Func(ID_OK|ID_CANCEL) 

Gibt:

0x01 
ID_OK 

0x10 
ID_CANCEL 

0x11 
ID_OK 
ID_CANCEL 

Flags als dies in der Regel größer sind. Wenn Sie eine kleine Anzahl von Flaggen haben, ist es viel einfacher, wenn Sie für jede Flagge einen Nybble reservieren können.

+0

Vielen Dank und DeepSpace, dauerte eine Weile, aber ich verstehe es jetzt. – potiongraphics

0

Der Schlüssel hier ist, die Werte der Flags in einer Weise zu "space out", dass jede Kombination von | mit einer beliebigen Anzahl von Flags einen eindeutigen Wert erzeugt. Auf diese Weise können Sie sagen, dass alle Flags einfach durch den Wert des Arguments verwendet werden sollen.

Auch wenn die folgenden Artikel spricht über C# Sie noch auf die Idee kommen können: http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/

Verwandte Themen