問題:有沒有辦法讓在python中使用字符串做一個函數對象?從字符串創建函數對象
信息:我正在研究一個項目,我將數據存儲在sqlite3服務器後端。沒有什麼可以爲此瘋狂的。 DAL類通常是通過代碼生成完成的,因爲代碼非常單調。但是這給了我一個想法。在python中找不到屬性時,如果你定義了函數「getattr」,它會在出錯之前調用它。所以我通過解析器和邏輯樹來設計它,我可以動態生成我第一次調用時需要的代碼,然後將函數對象保存爲本地attrib。例如:
DAL.getAll()
#getAll() not found, call __getattr__
DAL.__getattr__(self,attrib)#in this case attrib = getAll
##parser logic magic takes place here and i end up with a string for a new function
##convert string to function
DAL.getAll = newFunc
return newFunc
我已經試過編譯功能,但高管,和eval是遠不能令人滿意的是能夠完成這種壯舉的條款。我需要一些能夠實現多行功能的東西。除此之外,還有另外一種方法可以做到這一點,不需要將其寫入磁盤?我再次嘗試動態創建函數對象。
P.S .:是的,我知道這有可怕的安全和穩定性問題。是的,我知道這是一個非常無效的方式。我關心的?沒有。這是一個概念證明。 「python可以這樣做嗎?它可以動態創建一個函數對象」是我想知道的,而不是一些優越的選擇。 (儘管在回答手頭問題後可以隨時處理優秀的替代方案)
「exec和eval在能夠完成這種功能方面遠遠不能令人滿意」?什麼? 'exec'完全可以。你有什麼**具體**錯誤或問題? – 2011-05-23 13:47:01
嘗試從exec中返回一些東西。 – Narcolapser 2011-05-23 13:50:29
'exec'只是運行東西,他們在罐子上做他們所說的。 'a = eval(「123」)'將綁定123到'a'。你得到表達的價值。 – Skurmedel 2011-05-23 13:53:18