Сгенерируйте функцию Python во время выполнения и вызовите их с именем строки - PullRequest
0 голосов
/ 27 октября 2010

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. можно ли получить список fun_nameво время выполнения, потому что я хочу сохранить их в текстовом файле?

  2. Я обнаружил, что в определении функций есть общая часть - "tmp = #algo", могу ли я извлечь их из этих определений и могу ли я определить эти функции во время выполнения?Я хочу что-то вроде этого:

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 голосов
/ 27 октября 2010
fnmap = {
  'foo_001': foo_001,
  'foo_002': foo_002,
  'foo_003': foo_003,
}

print fnmap['foo_002'](3)

Используйте декоратор для перечисления функций, если вы не хотите печатать всю карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...