在多次调用的函数内编译正则表达式

2024-09-30 03:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

如果在函数内部编译正则表达式,并且该函数被多次调用,那么Python是否每次都重新编译正则表达式,还是Python缓存已编译的正则表达式(假设正则表达式没有更改)?在

例如:

def contains_text_of_interest(line):
    r = re.compile(r"foo\dbar\d")  
    return r.match(line)

def parse_file(fname):
    for line in open(fname):
        if contains_text_of_interest(line):
           # Do something interesting

Tags: of函数textrereturnfooparsedef
3条回答

如果你想避免打电话的开销重新编译()每次,您都可以:

def contains_text_of_interest(line, r = re.compile(r"foo\dbar\d")): 
    return r.match(line) 

看看模块里的代码重新编译函数和所有其他函数一样使用缓存,因此反复编译同一个正则表达式非常便宜(字典查找)。换言之,编写的代码应该是最易于理解、最易于维护或最具表现力的代码,而不必担心编译正则表达式的开销。在

你为什么不把重新编译在函数外部(在模块或类级别),给它一个显式的名称并直接使用它?这种正则表达式是一种常量,你可以用同样的方法来处理它。在

MATCH_FOO_BAR = re.compile(r"foo\dbar\d")  

def contains_text_of_interest(line):
    return MATCH_FOO_BAR.match(line)

相关问题 更多 >

    热门问题