在运行时生成Python函数并通过字符串名称调用它们

0 投票
1 回答
516 浏览
提问于 2025-04-16 06:09

foo.py

def foo_001(para): tmp = para + 2 return tmp 
def foo_002(para): tmp = para * 2 return tmp 
def foo_003(para): tmp = para / 2 return tmp 

... 
def foo_100(para): tmp = #complex algo, return tmp 

main.py

from foo import * 
fun_name = ["foo_001","foo_002","foo_002" ... "foo_100"] 

src = 1 
rzt = []  
for i in fun_name: 
    rzt.extent(eval(i)(src))  

以下是我的问题:

  1. 我能在运行时获取函数名称的列表吗?因为我想把它们保存到一个文本文件里。

  2. 我发现函数定义中有一个共同的部分,就是“tmp = #算法”,我能把它们从这些定义中提取出来吗?我能在运行时定义这些函数吗?我想要的效果是这样的:

foo.py

def foo_factory():  
    # in somehow 
    return adict      #function_name/function pair  

template = [ 
["foo_001","tmp = para + 2"], 
["foo_002","tmp = para * 2"], 
["foo_002","tmp = para + 2"], 
... 
["foo_100","tmp = #complex algo"] 

main.py

from foo import * 
dic = foo_factory(template) 
fun_name = dic.keys() 
src = 1 
rzt = []  
for i in fun_name: 
    rzt.extent(eval(i)(src))  
        #or 
    rzt.extent(dic(i)())

1 个回答

0
fnmap = {
  'foo_001': foo_001,
  'foo_002': foo_002,
  'foo_003': foo_003,
}

print fnmap['foo_002'](3)

如果你不想一个个手动写出所有的函数,可以用一个装饰器来帮你自动列举这些函数。

撰写回答