91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中為什么不要再用re.compile

發布時間:2021-09-06 16:56:12 來源:億速云 閱讀:185 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Python中為什么不要再用re.compile”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Python中為什么不要再用re.compile”這篇文章吧。

前言

如果大家在網上搜索Python 正則表達式,你將會看到大量的垃圾文章會這樣寫代碼:

import re

pattern = re.compile('正則表達式')
text = '一段字符串'
result = pattern.findall(text)

這些文章的作者,可能是被其他語言的壞習慣影響了,也可能是被其他垃圾文章誤導了,不假思索拿來就用。

在Python里面,真的不需要使用re.compile!

為了證明這一點,我們來看Python的源代碼。

在PyCharm里面輸入:

import re

re.search

然后Windows用戶按住鍵盤上的Ctrl鍵,鼠標左鍵點擊search,Mac用戶按住鍵盤上的Command鍵,鼠標左鍵點擊search,PyCharm會自動跳轉到Python的re模塊。在這里,你會看到我們常用的正則表達式方法,無論是findall還是search還是sub還是match,全部都是這樣寫的:

_compile(pattern, flag).對應的方法(string)

例如:

def findall(pattern, string, flags=0):
 """Return a list of all non-overlapping matches in the string.

 If one or more capturing groups are present in the pattern, return
 a list of groups; this will be a list of tuples if the pattern
 has more than one group.

 Empty matches are included in the result."""
 return _compile(pattern, flags).findall(string)

如下圖所示:

Python中為什么不要再用re.compile

然后我們再來看compile:

def compile(pattern, flags=0):
 "Compile a regular expression pattern, returning a Pattern object."
 return _compile(pattern, flags)

如下圖所示:

Python中為什么不要再用re.compile

看出問題來了嗎?

我們常用的正則表達式方法,都已經自帶了compile了!

根本沒有必要多此一舉先re.compile再調用正則表達式方法。

此時,可能會有人反駁:

如果我有一百萬條字符串,使用使用某一個正則表達式去匹配,那么我可以這樣寫代碼:

texts = [包含一百萬個字符串的列表]
pattern = re.compile('正則表達式')
for text in texts:
 pattern.search(text)

這個時候,re.compile只執行了1次,而如果你像下面這樣寫代碼:

texts = [包含一百萬個字符串的列表]
for text in texts:
 re.search('正則表達式', text)

相當于你在底層對同一個正則表達式執行了100萬次re.compile。

Talk is cheap, show me the code.

我們來看源代碼,正則表達式re.compile調用的是_compile,我們就去看_compile的源代碼,如下圖所示:

紅框中的代碼,說明了_compile自帶緩存。它會自動儲存最多512條由type(pattern), pattern, flags)組成的Key,只要是同一個正則表達式,同一個flag,那么調用兩次_compile時,第二次會直接讀取緩存。

綜上所述,請你不要再手動調用re.compile了,這是從其他語言(對的,我說的就是Java)帶過來的陋習。

以上是“Python中為什么不要再用re.compile”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陵川县| 岳普湖县| 五台县| 赤城县| 曲周县| 南陵县| 达日县| 阳东县| 榆树市| 马龙县| 富裕县| 泾川县| 饶河县| 尼玛县| 巴林左旗| 壤塘县| 怀安县| 仁化县| 城固县| 股票| 莲花县| 沙坪坝区| 伽师县| 博乐市| 色达县| 涟源市| 寻乌县| 诏安县| 阿克| 岗巴县| 遂宁市| 宁阳县| 卓资县| 比如县| 灌云县| 五寨县| 金川县| 闽清县| 沁水县| 密山市| 吉水县|