在循环中更改函数的名称

changing the name of a function in a loop

我没有找到问题的答案

我有名称为 stage_1()、stage_2() e.t.c(至 8)的函数。

我可以 运行 使用循环吗?

stage = 1 
for i in range(8):
      print((f'stage_{stage}'))
      stage +=1

我知道这是错误的。什么是正确的方法?

I have function with names stage_1(), stage_2() e.t.c (to 8).

实际上这是一个非常糟糕的想法。


Can I run it using loop?

当然可以!您可以使用 globals:

for i in range(1, 8):
    current_function = globals()[f"stage_{i}"]
    result_of_current_function = current_function()

甚至使用 eval or exec:

for i in range(1, 8): # Range should start from 1
    eval(f"stage_{i}()") # or exec

你还记得我告诉你的时候吗“这是一个非常糟糕的想法”?

更好的办法是将函数存储到 list:

functions_list = [
    stage_1, stage_2, stage_3,
    stage_4, stage_5, stage_6,
    stage_7
]

最后你可以这样在 for 循环中调用它们:

for function in functions_list:
    function()

如果你想运行像这样在循环中运行,你应该使用eval()

stage = 1 
for i in range(8):
      print(eval((f'stage_{stage}')))
      stage +=1

但是使用eval()是错误的习惯,非常不安全,explanation