假设我有一个硬编码的函数来使子字符串小写,当在较大的字符串中找到该子字符串的实例时,例如: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它的第一个参数开始。通过将方法作为类的属性调用,您可以强制该参数的值。
添加回答
举报
0/150
提交
取消