假设我有一个硬编码的函数,当在较大的字符串中找到子字符串的实例时,该函数使子字符串变为小写,例如:
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))
这不起作用(这就是为什么我要问这个问题),但希望这能证明这个想法,以一种可读的方式来概括函数的作用。你知道吗
我想有一个选择是编写一个helper函数来包装stringInstance.lower()
并传递字符串的副本,这既低效又笨拙。我希望有一种Python专家知道的更优雅的方法。你知道吗
例如,使用C时,我会将指向要作为参数运行的函数的指针传递给process_record()
,并直接在感兴趣的变量上运行函数指针。你知道吗
在Python中使用字符串基元函数(或基元或其他类上的类似函数)时,执行相同操作的语法是什么?你知道吗
你的例子有点复杂,所以我要把它分成两个不同的问题:
1)如何提供函数作为参数?你知道吗
函数是与其他对象一样的对象,可以按预期传递,例如:
在你的例子中,你可以这样做
我不推荐的另一种方法是
2)如何对字符串中正则表达式的每个匹配应用效果?你知道吗
为此,我建议使用内置的“sub”函数,它既接受字符串,也接受函数。你知道吗
希望这有帮助!你知道吗
一般来说,使用这种方法:
Python中方法的定义总是以
self
作为第一个参数。通过将方法作为类的属性调用,可以强制该参数的值。你知道吗相关问题 更多 >
编程相关推荐