为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMMHUHU 2021-09-23 09:57:19
假设我有一个硬编码的函数来使子字符串小写,当在较大的字符串中找到该子字符串的实例时,例如: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')>fooAbcdEF我想要做的是概括这一点,传入一个字符串函数(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 中使用字符串原始函数(或类似的原始类或其他类)时,执行相同操作的语法是什么?
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

一般来说,使用这种方法:


def call_fn(arg, fn):

    return fn(arg)


call_fn('FOO', str.lower) # 'foo'

Python 中方法的定义总是以self它的第一个参数开始。通过将方法作为类的属性调用,您可以强制该参数的值。


查看完整回答
反对 回复 2021-09-23
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号