吾愛破解 - LCG - LSG |安卓破解|病毒分析|huihengkj.com

 找回密碼
 注冊[Register]

QQ登錄

500彩票邀请码只需一步,快速開始

搜索
12
返回列表

[求助] 正則表達式為啥有個【編譯 re.compile】?

[復制鏈接]
11#
c03xp 發表于 2020-10-15 14:30
沒錯,
import re,dis

def foo():
    texts = ["12345","abcde","aaaaa"]
    for i in range(3):
        re.match("[a-z]+",texts[i])
        
dis.dis(foo)
可以看出循環一次,compile執行一次,解釋器沒有將不變操作提到循環外面
下面可能高效一些
def foo():
    m = re.compile(("[a-z]+")
    texts = ["12345","abcde","aaaaa"]
    for i in range(3):
        m.findall(texts[i])

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

12#
周峻弘6 發表于 2020-10-17 17:23
不用正則是正道.
把你需要的功能寫出來就行了.一樣的是函數.
13#
xifangczy 發表于 2020-10-18 04:54
本帖最后由 xifangczy 于 2020-10-18 05:03 編輯

不管用不用re.compile 最后都會把你正則編譯緩存起來的。所以效率并沒有高多少。
如果你有很多地方需要這條正則,很多字符串需要匹配,好處是以后你只需要改re.compile里的正則 而不是具體每個地方都要改,re.search滿天飛,失去了可維護性。

雖然不用re.compile 編譯器也會幫你把使用過的正則都編譯緩存好,但我從來不推薦不使用re.compile
因為re.compile 程序員可以自己控制編譯緩存正則,而不是依靠編譯器自己去處理,編譯器處理總是未知,未來版本會怎么樣大家都不清楚,自己能掌控的事情為什么要交給編譯器。所以不能把代碼交給未定義的實現方法上,而要用官方給你并且已確認的接口上。為了讓你代碼活得更久。
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止回復與主題無關非技術內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|處罰記錄|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-10-28 17:16

Powered by Discuz!

500彩票邀请码Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表

500彩票邀請碼-彩經網