2012-11-02 55 views
0

所以我有一個名字的字典,我用它來調用函數。它工作正常,但我更喜歡把它放在我的設置文件中。但是,如果我這樣做了,我會從設置文件中得到錯誤信息,說沒有該名稱的功能(即使我當時沒有調用它們)。任何解決方法?從字典中調用函數,導入的設置文件中的字典

def callfunct(id, time): 
    #stuff here 
def callotherfunct(id, time): 
    #stuff here 
dict = {"blah blah": callfunct, "blah blah blah": callfunct, "otherblah": callotherfunct} 
dict[str(nameid)](id, time) 

希望這是有道理的。也可以打開其他想法,但基本上我有大約50次這些定義和唯一名稱的迭代,這些名稱是通過nameid傳遞的,需要調用特定函數,所以這就是爲什麼我按照我的方式執行操作,以便可以快速添加新名稱。如果我能夠無縫地將字典無縫地輸入到設置文件中,它顯然會更快。

+0

這對我工作正常,你會得到什麼錯誤? –

+0

下面的人回答,但如果你把dict = {}放到settings.py中,然後將它導入到main中,settings.py會發出錯誤 – user1610719

回答

1

如果您嘗試

def f_one(id, time): 
    pass 

def f_two(id, time): 
    pass 

d = {"blah blah":"f_one", "blah blah blah":"f_one", "otherblah","f_two" 
locals()[d[str(nameid)]](id, time) 

(更換隻需加載配置文件與你想調用的函數的字符串名字典初始化),運作的?

如果不是,那就需要多一點信息:配置文件是什麼樣子的,以及如何加載它?

我猜配置文件部分不起作用的原因是,你試圖直接從配置文件引用功能,這不應該工作。這是使用任何所儲存的配置文件,並在locals()字典中查找它(如果你在一個函數的時候,你將不得不使用globals()代替)

+0

謝謝!具體是什麼導致你的函數調用不返回「(」'str'object is not callable「,)」??我假設它是locals()或[d [str ..]]附近的額外括號,但我想查看它以備將來參考 – user1610719

+0

您剛收到一個字符串,它是您想要的函數的名稱。 'locals'讓你在當前範圍內查看。 'globals'可以讓你在當前的模塊範圍內查找它。 –

+0

我應該澄清這些函數返回一個字典從變量名到變量值。 –

0

你可以初始化字典的擡頭功能只當你試圖訪問它:

d = {} 
d.setdefault('func1', globals()['func1'])()