欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中請(qǐng)不要再用re.compile了

 更新時(shí)間:2019年06月30日 10:51:05   作者:青南  
這篇文章主要給大家介紹了關(guān)于Python中為何不要再用re.compile的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

如果大家在網(wǎng)上搜索Python 正則表達(dá)式,你將會(huì)看到大量的垃圾文章會(huì)這樣寫代碼:

import re

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

這些文章的作者,可能是被其他語(yǔ)言的壞習(xí)慣影響了,也可能是被其他垃圾文章誤導(dǎo)了,不假思索拿來(lái)就用。

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

為了證明這一點(diǎn),我們來(lái)看Python的源代碼。

在PyCharm里面輸入:

import re

re.search

然后Windows用戶按住鍵盤上的Ctrl鍵,鼠標(biāo)左鍵點(diǎn)擊search,Mac用戶按住鍵盤上的Command鍵,鼠標(biāo)左鍵點(diǎn)擊search,PyCharm會(huì)自動(dòng)跳轉(zhuǎn)到Python的re模塊。在這里,你會(huì)看到我們常用的正則表達(dá)式方法,無(wú)論是findall還是search還是sub還是match,全部都是這樣寫的:

_compile(pattern, flag).對(duì)應(yīng)的方法(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)

如下圖所示:

然后我們?cè)賮?lái)看compile:

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

如下圖所示:

看出問(wèn)題來(lái)了嗎?

我們常用的正則表達(dá)式方法,都已經(jīng)自帶了compile了!

根本沒(méi)有必要多此一舉先re.compile再調(diào)用正則表達(dá)式方法。

此時(shí),可能會(huì)有人反駁:

如果我有一百萬(wàn)條字符串,使用使用某一個(gè)正則表達(dá)式去匹配,那么我可以這樣寫代碼:

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

這個(gè)時(shí)候,re.compile只執(zhí)行了1次,而如果你像下面這樣寫代碼:

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

相當(dāng)于你在底層對(duì)同一個(gè)正則表達(dá)式執(zhí)行了100萬(wàn)次re.compile。

Talk is cheap, show me the code.

我們來(lái)看源代碼,正則表達(dá)式re.compile調(diào)用的是_compile,我們就去看_compile的源代碼,如下圖所示:

紅框中的代碼,說(shuō)明了_compile自帶緩存。它會(huì)自動(dòng)儲(chǔ)存最多512條由type(pattern), pattern, flags)組成的Key,只要是同一個(gè)正則表達(dá)式,同一個(gè)flag,那么調(diào)用兩次_compile時(shí),第二次會(huì)直接讀取緩存。

綜上所述,請(qǐng)你不要再手動(dòng)調(diào)用re.compile了,這是從其他語(yǔ)言(對(duì)的,我說(shuō)的就是Java)帶過(guò)來(lái)的陋習(xí)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python中整數(shù)的緩存機(jī)制講解

    Python中整數(shù)的緩存機(jī)制講解

    今天小編就為大家分享一篇關(guān)于Python中整數(shù)的緩存機(jī)制講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • python mysql斷開重連的實(shí)現(xiàn)方法

    python mysql斷開重連的實(shí)現(xiàn)方法

    這篇文章主要介紹了python mysql斷開重連的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 關(guān)于python實(shí)現(xiàn)常用的相似度計(jì)算方法

    關(guān)于python實(shí)現(xiàn)常用的相似度計(jì)算方法

    這篇文章主要介紹了關(guān)于python實(shí)現(xiàn)常用的相似度計(jì)算方法,最初的相似度計(jì)算是為了表征向量的重合程度的,在這里最經(jīng)典的就是余弦相似度了,當(dāng)然使用正弦或者是正切等等三角函數(shù)也都是可以的,需要的朋友可以參考下
    2023-07-07
  • python實(shí)現(xiàn)sqlalchemy的使用概述

    python實(shí)現(xiàn)sqlalchemy的使用概述

    SQLAlchemy是Python中最有名的ORM工具,特點(diǎn)是操縱Python對(duì)象而不是SQL查詢,也就是在代碼層面考慮的是對(duì)象,而不是SQL,體現(xiàn)的是一種程序化思維,這樣使得Python程序更加簡(jiǎn)潔易懂,具體內(nèi)容詳情跟隨小編一起看看吧
    2021-08-08
  • python2.7 安裝pip的方法步驟(管用)

    python2.7 安裝pip的方法步驟(管用)

    這篇文章主要介紹了python2.7 安裝pip的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 為什么從Python 3.6開始字典有序并效率更高

    為什么從Python 3.6開始字典有序并效率更高

    這篇文章主要給大家介紹了關(guān)于為什么從Python 3.6開始字典有序并效率更高的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • numpy中np.sort返回索引的具體使用

    numpy中np.sort返回索引的具體使用

    本文主要介紹了使用numpy中np.sort函數(shù)返回索引的詳細(xì)解釋和使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 利用Python實(shí)現(xiàn)kNN算法的代碼

    利用Python實(shí)現(xiàn)kNN算法的代碼

    這篇文章主要介紹了利用Python實(shí)現(xiàn)kNN算法的代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python字符串本身作為bytes進(jìn)行解碼的問(wèn)題

    Python字符串本身作為bytes進(jìn)行解碼的問(wèn)題

    這篇文章主要介紹了解決Python字符串本身作為bytes進(jìn)行解碼的問(wèn)題,文末給大家補(bǔ)充介紹了,Python字符串如何轉(zhuǎn)為bytes對(duì)象?Python字符串和bytes類型怎么互轉(zhuǎn),需要的朋友可以參考下
    2022-11-11
  • Python Requests.post()請(qǐng)求失敗時(shí)的retry設(shè)置方式

    Python Requests.post()請(qǐng)求失敗時(shí)的retry設(shè)置方式

    這篇文章主要介紹了Python Requests.post()請(qǐng)求失敗時(shí)的retry設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論