Предположим, у меня есть функция, которая жестко запрограммирована, чтобы сделать строчную букву подстроки, когда экземпляры этой подстроки находятся в большей строке, например:
def process_record(header, needle, pattern):
sequence = needle
for idx in [m.start() for m in re.finditer(pattern, needle)]:
offset = idx + len(pattern)
sequence = sequence[:idx] + needle[idx:offset].lower() + sequence[offset:]
sys.stdout.write('%s\n%s\n' % (header, sequence))
Это прекрасно работает, например:
>>> process_record('>foo', 'ABCDEF', 'BCD')
>foo
AbcdEF
То, что я хотел бы сделать, это обобщить это, передать в качестве параметра строковую функцию (в данном случае lower
, но это может быть любая функция примитивного типа или класса).Что-то вроде:
def process_record(header, needle, pattern, fn):
sequence = needle
for idx in [m.start() for m in re.finditer(pattern, needle)]:
offset = idx + len(pattern)
sequence = sequence[:idx] + needle[idx:offset].fn() + sequence[offset:]
sys.stdout.write('%s\n%s\n' % (header, sequence))
Это не работает (вот почему я задаю вопрос), но, надеюсь, это демонстрирует идею, чтобы попытаться обобщить то, что функция делает так, чтобы она была читабельной.
Один из вариантов, который я полагаю, - написать вспомогательную функцию, которая обертывает stringInstance.lower()
и передает копии строк, что неэффективно и неуклюже.Я надеюсь, что есть более элегантный подход, о котором знают эксперты Python.
С C, например, я бы передал указатель на функцию, которую я хочу запустить в качестве параметра, на process_record()
и запустил быуказатель на функцию непосредственно на интересующую переменную.
Каков синтаксис для того же самого при использовании строковых примитивных функций (или похожих на примитивных или других классах) в Python?