Skip to main content
 首页 » 编程设计

python之为字符串定义动态函数

2025年05月04日34kerrycode

我有一个我每天都使用的小 python 脚本......它基本上读取一个文件,并且我基本上为每一行应用不同的字符串函数,如 strip()、replace() 等......我一直在编辑文件和注释以更改功能。根据我正在处理的文件,我使用不同的函数。例如,我得到一个文件,其中每一行我都需要使用 line.replace(' ','') 和 line.strip()...

将所有这些作为我的脚本的一部分的最佳方式是什么?所以我只能说为每个函数分配数字,然后说为每一行应用函数 1 和 4。

请您参考如下方法:

首先,许多字符串函数——包括剥离和替换——都是deprecated。 .以下答案改为使用字符串方法。 (而不是 string.strip("Hello "),我使用等效于 "Hello ".strip()。)

这里有一些代码可以为您简化工作。以下代码假定无论您在字符串上调用什么方法,该方法都将返回另一个字符串。

class O(object): 
    c = str.capitalize 
    r = str.replace 
    s = str.strip 
 
def process_line(line, *ops): 
    i = iter(ops) 
    while True: 
        try: 
            op = i.next() 
            args = i.next() 
        except StopIteration: 
            break 
        line = op(line, *args) 
    return line 

O 类的存在是为了让高度缩写的方法名称不会污染您的 namespace 。当你想添加更多的字符串方法时,你可以将它们添加到 O 中,格式与给定的相同。

process_line 函数是所有有趣事情发生的地方。首先,这里是参数格式的描述:

  • 第一个参数是要处理的字符串。
  • 其余参数必须成对给出。
    • 该对的第一个参数是一个字符串方法。在此处使用缩短的方法名称。
    • 该对的第二个参数是一个列表,表示该特定字符串方法的参数。

process_line 函数返回执行所有这些操作后出现的字符串。

下面是一些示例代码,展示了如何在您自己的脚本中使用上述代码。我将 process_line 的参数分隔成多行以显示参数的分组。当然,如果您只是在日常脚本中修改和使用这段代码,您可以将所有参数压缩到一行;这实际上使它更容易阅读。

f = open("parrot_sketch.txt") 
for line in f: 
    p = process_line( 
        line, 
        O.r, ["He's resting...", "This is an ex-parrot!"], 
        O.c, [], 
        O.s, [] 
    ) 
    print p 

当然,如果您特别想使用数字,您可以将函数命名为 O.f1、O.f2、O.f3…但我假设这不是你问题的精神。