2010-10-27 35 views
0

foo.py調用它們生成運行Python函數與字符串名稱

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)()) 

回答

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

print fnmap['foo_002'](3) 

使用裝飾枚舉功能,如果你不喜歡輸入整個地圖。

+0

感謝您的回覆,但您的答案和修飾器可能不是我想要的,我希望sinppet可以在運行時生成函數的名稱,並且可以在下次運行時執行相同的操作。 – user478514 2010-10-27 09:43:37