Python 使用re.compile(flags=),运算符|和+;不同(如果有的话)?

Python 使用re.compile(flags=),运算符|和+;不同(如果有的话)?,python,regex,bitwise-operators,bitwise-or,Python,Regex,Bitwise Operators,Bitwise Or,对于python正则表达式,标志基本上是ints,以2的幂分布。其价值如下: 对于[re.I、re.L、re.M、re.S、re.U、re.X、re.DEBUG、re.A]中的标志: 打印(f'{flag.name:>10}',flag+0,sep='\t') #无知案例2 #地点4 #多行8 #多道尔16 #UNICODE 32 #冗长的64 #调试128 #ASCII 256 可以将多个标志传递给标志关键字参数;建议使用按位OR运算符(|),但据我所知,这实际上与使用加法运算符(+)相同。

对于python正则表达式,标志基本上是
int
s,以2的幂分布。其价值如下:

对于[re.I、re.L、re.M、re.S、re.U、re.X、re.DEBUG、re.A]中的标志:
打印(f'{flag.name:>10}',flag+0,sep='\t')
#无知案例2
#地点4
#多行8
#多道尔16
#UNICODE 32
#冗长的64
#调试128
#ASCII 256
可以将多个标志传递给
标志
关键字参数;建议使用按位OR运算符(
|
),但据我所知,这实际上与使用加法运算符(
+
)相同。在下面的示例中,两个运算符都产生
18

re.I | re。s
# 
re.I+re。s
# 18
除了不是官方推荐的方法外,使用
+
操作符会产生不期望的结果还有什么实际原因吗


注意:我打算在我的代码中使用
|
。这纯粹是一个学术问题。

按位或,
|
将或操作数的位不带任何进位<如果同一位置的两个位为1,代码>+将携带并产生不同的结果。@Todd在实践中,像
flags=re.I | re.I
这样的操作似乎很奇怪,但我可以想象一个算法会出现重复的标志。你是对的,
|
在这方面肯定更健壮。也许re标志没有任何重叠。但在其他情况下,可能会有。例如,某个位模式可以定义应用程序的模式,该模式是多个标志的组合。。也许这些复杂模式不止一种。。您希望同时启用这两种功能。。因此,您必须删除或删除它们,否则如果添加它们,您将得到意外的配置。这不仅仅是Python的一个奇怪之处。这在类C语言和其他语言中很普遍。按位或,
|
将或操作数的位不带任何进位<如果同一位置的两个位为1,代码>+将携带并产生不同的结果。@Todd在实践中,像
flags=re.I | re.I
这样的操作似乎很奇怪,但我可以想象一个算法会出现重复的标志。你是对的,
|
在这方面肯定更健壮。也许re标志没有任何重叠。但在其他情况下,可能会有。例如,某个位模式可以定义应用程序的模式,该模式是多个标志的组合。。也许这些复杂模式不止一种。。您希望同时启用这两种功能。。因此,您必须删除或删除它们,否则如果添加它们,您将得到意外的配置。这不仅仅是Python的一个奇怪之处。这在类C语言和其他语言中很普遍。