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 就简单多了。
我在这里和使用 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 就简单多了。