2013-09-06 2 views
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» не имеет атрибута «метод», хотя я передаю «поиск» в качестве третьего параметра, который должен быть вызван при компиляции. Что я делаю неправильно или не совсем понимаю здесь?

ответ

3

Pass 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.

+0

Добавление возвращаемого значения по умолчанию (третий аргумент) для getattr() здесь также может быть полезным. На всякий случай строка, переданная внутри, не соответствует атрибуту 'compiled'. В противном случае 'AttributeError' – samstav

Смежные вопросы