Python: 如何访问由 | 分隔的 ID (管道)在争论中

Python: How can I access IDs separated by | (pipe) in an argument

我在这里和使用 google 都进行了搜索。 | (管道)符号是按位或运算符,但我找不到任何特定于我的问题的内容。这是来自 Cinema4D Python SDK 的 example 并且有一个参数 flags ,您可以在其中设置多个由 | 分隔的 ID符号。

这具体是什么,我如何访问下面函数中的 ID?

ID_OK = 100
ID_CANCEL = 101

def Func(flags):
    print flags
    return

Func(ID_OK|ID_CANCEL)

..

>> 101

谢谢。

这里的关键是 "space out" 标志的值,这样每个 | 与任意数量的标志的组合都会产生一个唯一的值。这样你就可以知道每个标志都应该通过参数的值来使用。

即使下面的文章讨论了 C#,您仍然可以理解这个想法: http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/

像这样的标志有时被称为 "bit-masks"。如果将它们定义为十六进制,您会发现它们更易于使用。

您可以使用二进制 & 来确定是否设置了标志。例如:

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)

给出:

0x01
ID_OK

0x10
ID_CANCEL

0x11
ID_OK
ID_CANCEL

旗帜通常比这个大。如果你有少量的标志,那么如果你可以为每个标志保留一个 nybble 就简单多了。