当我编译正则表达式并将其分配给一个变量或将其添加到列表中时,我怀疑Python 2 x和3 x上的行为会有所不同。将re.compile添加到列表
import re
z = re.compile('a')
print(z)
上方2.X
<_sre.SRE_Pattern object at 0x7ff839e57030>
和3.X片断输出
re.compile('a')
第一个看起来像正则表达式被编译,并准备去每当我需要它(这是我想要的),但第二个仍然说re.compile
。
这是否意味着正则表达式是在我需要时即时编译的,甚至在每次参考z
并执行类似z.match('a')
时都会重新编译?或者是所描述的Python 3行为只是表面化妆品,它还保留了一个编译后的副本?
我的观点是,我(静态)编译我的正则表达式在源文件的开始,所以可以节省一些时间,我反复在循环中引用它们,但如果没有发生,那就不好。
你不清楚,没有什么区别 – Hackaholic 2014-11-25 12:32:20
@Hackaholic,我认为你是对的,因为即使在P3上,print(z .__ class__)和print(z.pattern)也显示了预期的结果。所以,该对象已经创建。但是,我不确定我是否真的喜欢P3对SRE_Pattern对象进行字符串化的方式。如果我们有一个包含're.compile(\'a \')'的字符串变量呢?他们会打印完全一样的。也许这是因为我习惯了P2的方式。 – 2014-11-25 12:46:35