簡體   English   中英

將重新編譯添加到列表

[英]Adding re.compile to list

當我編譯一個正則表達式並將其分配給變量或將其添加到列表中時,我懷疑在Python 2.x和3.x上會出現不同的行為。

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行為僅僅是裝飾性的,並且還在后台維護了已編譯的副本?

我的觀點是,我(靜態地)在源文件的開頭編譯了我的正則表達式,因此可以節省一些時間,因為我在循環中重復引用它們,但是如果這種情況沒有發生,那就不好了。

這意味着__repr___sre.SRE_Pattern已更改,從(不是很有用)默認的"<classname object at address>"變為更有用的內容。 根據數據模型文檔 (重點是我的):

如果可能,[對象的__repr__字符串表示形式] 應該看起來像一個有效的Python表達式,該表達式可用於重新創建具有相同值的對象 (給定適當的環境)。 如果這不可能,則應返回格式為<...some useful description...>的字符串。

比較2.x:

>>> import re
>>> a = re.compile('a')
>>> a
<_sre.SRE_Pattern object at 0x02654440>
>>> type(a)
<type '_sre.SRE_Pattern'>
>>> repr(a)
'<_sre.SRE_Pattern object at 0x02654440>'

和3.x:

>>> import re
>>> a = re.compile('a')
>>> a
re.compile('a')
>>> type(a)
<class '_sre.SRE_Pattern'>
>>> repr(a)
"re.compile('a')"

行為沒有區別-正則表達式仍然只編譯一次(這就是重點)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM