Python:如何访问由|分隔的ID参数

时间:2016-08-04 10:43:50

标签: python function arguments python-2.x flags

我在这里搜索并使用谷歌。 | (管道)符号是按位OR运算符,但我找不到任何特定于我的问题的东西。这是来自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

谢谢。

2 个答案:

答案 0 :(得分:0)

这里的关键是以一种方式“空出”标志的值,使|的每个组合与任意数量的标志产生唯一值。这样你就可以告诉每个标志只是用于参数的值。

即使下面的文章谈到C#,你仍然可以得到这个想法: http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/

答案 1 :(得分:0)

这样的标志有时被称为" 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则更简单。