在运行时生成Python函数并通过字符串名称调用它们
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))
以下是我的问题:
我能在运行时获取函数名称的列表吗?因为我想把它们保存到一个文本文件里。
我发现函数定义中有一个共同的部分,就是“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)
如果你不想一个个手动写出所有的函数,可以用一个装饰器来帮你自动列举这些函数。