我在这里搜索并使用谷歌。 | (管道)符号是按位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
谢谢。
答案 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则更简单。