一些Python标准库使用这样的标志:
re.match(pattern, str, re.MULTILINE | re.IGNORECASE)
我想知道,如果你自己创建一个类,如何实现它。 我搜索了互联网,发现: Python: passing flags to functions 这个问题对我来说并不令人满意,因为它只显示了说
的方法bla.function(argument, flag1=0, flag3=1)
但我真的想要它
bla.function(argument, bla.SOMEFLAG | bla.SOMEOTHERFLAG)
这可能吗?
此外是否可以创建这些标志,而不让它们引用实际值?,所以你真的要求代码中的bla.SOMEFLAG,而不是一个int,由标志表示?一个示例用法是:
mask_list = [
[ 15, "foo", "bar"],
[bla.TRANSPARENT, "egg", 14.3],
[ (4,7,2), {"name":"john"}, bla.TRANSPARENT]
]
其中mask_list表示一个掩码(包含任何元素),稍后可以通过函数将其与另一个列表进行比较,所有设置了bla.TRANSPARENT标志的索引都会被比较忽略。
如果有人可以通过我链接到文件,解释这个,或者可以提出一个简单的解释,我将非常感激。 (我使用的是Python3)
提前致谢!
答案 0 :(得分:0)
没有什么可以阻止你这样做:
bla.function(argument, bla.SOMEFLAG | bla.SOMEOTHERFLAG)
如果你的功能签名是
def function(arg, flags):
但|
是一个按位运算符,因此它意味着它的操作数是整数,或类似整数。因此bla.SOMEFLAG
和bla.SOMEOTHERFLAG
必须是整数值才能生效。
另一种选择是使用关键字参数:
bla.function(argument, SOMEFLAG = True, SOMEOTHERFLAG = True)
并像这样定义你的函数:
def function(arg, **flags):
在该功能中,flags
将是:
{'SOMEFLAG': True, 'SOMEOTHERFLAG': True}