最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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進(jìn)行數(shù)據(jù)加載

    利用python進(jìn)行數(shù)據(jù)加載

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著python數(shù)據(jù)加載展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • pandas求行最大值及其索引的實(shí)現(xiàn)

    pandas求行最大值及其索引的實(shí)現(xiàn)

    工作需要,查詢某一行中的最大值及其索引,本文主要介紹了pandas求行最大值及其索引的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • python3 pillow模塊實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼

    python3 pillow模塊實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了python3 pillow模塊實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Pytorch中Softmax與LogSigmoid的對(duì)比分析

    Pytorch中Softmax與LogSigmoid的對(duì)比分析

    這篇文章主要介紹了Pytorch中Softmax與LogSigmoid的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python常用Web框架Django、Flask與Tornado介紹

    Python常用Web框架Django、Flask與Tornado介紹

    這篇文章介紹了Python常用Web框架Django、Flask與Tornado,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 對(duì)python實(shí)時(shí)得到鼠標(biāo)位置的示例講解

    對(duì)python實(shí)時(shí)得到鼠標(biāo)位置的示例講解

    今天小編就為大家分享一篇對(duì)python實(shí)時(shí)得到鼠標(biāo)位置的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 詳解在SpringBoot如何優(yōu)雅的使用多線程

    詳解在SpringBoot如何優(yōu)雅的使用多線程

    這篇文章主要帶大家快速了解一下@Async注解的用法,包括異步方法無(wú)返回值、有返回值,最后總結(jié)了@Async注解失效的幾個(gè)坑,感興趣的小伙伴可以了解一下
    2023-02-02
  • python掌握字符串只需這一篇就夠了

    python掌握字符串只需這一篇就夠了

    字符串是 Python 中最常用的數(shù)據(jù)類型。我們可以使用引號(hào)('或")來(lái)創(chuàng)建字符串。創(chuàng)建字符串很簡(jiǎn)單,只要為變量分配一個(gè)值即可
    2021-11-11
  • Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python3 合并二叉樹的實(shí)現(xiàn)

    Python3 合并二叉樹的實(shí)現(xiàn)

    這篇文章主要介紹了Python3 合并二叉樹的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

磐石市| 巴林右旗| 佛冈县| 大洼县| 汉源县| 曲靖市| 西盟| 抚顺县| 绥芬河市| 神农架林区| 衡东县| 西平县| 安福县| 玉林市| 德庆县| 宁明县| 淮南市| 吉安市| 清水河县| 阿克| 马边| 碌曲县| 闸北区| 阿瓦提县| 新竹县| 镇平县| 梅河口市| 奉新县| 新营市| 高唐县| 怀来县| 琼海市| 九台市| 武鸣县| 宁国市| 紫阳县| 丰顺县| 彩票| 微山县| 弥勒县| 双桥区|