如何生成多个函数名?

时间:2017-06-24 14:01:53

标签: python naming

我有许多名为func_1func_2的函数,...我想在for循环中调用每个函数。

我能做到:

for f in [func_1, func_2, func_3]:
    print f('foo', 'bar')

但我更喜欢打字。有没有办法生成名称,如:

for f in ['func_%s' % range(1,5)]:
    print f('foo', 'bar')

这与'str' object is not callable失败,但有什么相似的吗?

编辑:我正在测试func的许多替代版本。他们都应该给出相同的结果,但具有不同的实现。我控制输入,这不在生产中。

然而,这在其他情况下是不好的,也可能是危险的做法。请参阅评论和答案。

2 个答案:

答案 0 :(得分:3)

您可以在本地范围内查找它们:

for f in ['func_%s' % range(1,5)]:
    print locals()[f]('foo', 'bar')

locals()函数返回名称字典到本地范围内的值。如果它们是全局函数,请使用globals()

答案 1 :(得分:1)

您可以使用eval。但是使用eval非常危险。玩它时要小心。

for f in ['func_%s' % range(1,5)]:
    print eval(f)('foo', 'bar')