如何使用 Python 函数模拟 C 风格的函数指针

假设我有一个硬编码的函数来使子字符串小写,当在较大的字符串中找到该子字符串的实例时,例如:


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 中使用字符串原始函数(或类似的原始类或其他类)时,执行相同操作的语法是什么?


MMMHUHU
浏览 189回答 2
2回答

潇潇雨雨

一般来说,使用这种方法:def call_fn(arg, fn):    return fn(arg)call_fn('FOO', str.lower) # 'foo'Python 中方法的定义总是以self它的第一个参数开始。通过将方法作为类的属性调用,您可以强制该参数的值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python