2

是否可以将方法作为函数参数传递?

在学习正则表达式以及如何使用它们时,我决定尝试创建一个函数,我可以使用所使用的不同正则表达式方法重复调用:

    def finder (regex, query, method):
        compiled = re.compile(regex)
        if compiled.method(query) is True:
            print "We have some sort of match!"
        else:
            print "We do not have a match..."

当我尝试它时,我得到一个属性错误:'_sre.SRE_pattern' 没有属性'method',即使我将“search”作为第三个参数传递,它应该可以在编译时调用。我在这里做错了什么或不完全理解?

4

1 回答 1

3

method作为字符串传递,并使用getattr

def finder (regex, query, method):
    compiled = re.compile(regex)
    if getattr(compiled, method)(query):
        print "We have some sort of match!"
    else:
        print "We do not have a match..."

finder(regex, query, "search")

另外,使用

if condition

代替

if condition is True

因为当compiled.method(query)找到匹配项时,它返回一个匹配对象,而不是True.

于 2013-09-06T21:20:20.540 回答