我有一百个独特的函数,我们称它们为 func_{i}() 其中 {i} 是函数的编号,例如 func_56 ()。我有一个循环,我基本上需要这样做:
for item in list:
values[0] = func_0(item,values[0])
values[1] = func_1(item,values[1])
...
values[99] = func_99(item,values[99])
执行此操作的最 pythonic 方法是什么?我能想到:
for item in list:
for i in range(100):
values[i] = eval('func_' + str(i) + '(item, values[i]')
但是 eval() 通常不被认为是好的做法。
或者:
function_list = [func_0, func_1 .... ] # is there a way of doing this programmatically?
for item in list:
for i in range(100):
values[i] = function_list[i](item, values[i])
但是手动构建函数列表看起来仍然很丑陋,eval() 似乎是唯一的方法。即便如此,这个代码片段似乎可以变得更加优雅和 pythonic,这可能不是最有效的做事方式。
出于这个问题的目的,可以安全地假设每个 func_{i}() 都是完全唯一的,并且没有办法让它们共享代码,也没有办法将其压缩为少于 100 个独特的功能。
请您参考如下方法:
for item in list:
for i in range(100):
values[i] = locals()["func_%d" % (i)](item, values[i])
根据函数的定义方式,您可以使用 locals() 或 globals() 或 getattr(some_module, "func_%d"% ( i)).
