2016-03-07 122 views
0

試圖弄清楚我可以如何執行以下操作。假設我有一些具有我想要設置的屬性的函數。一般我們稱之爲:func.attrib = ['list']。挑戰是'func'可能會根據某些查找的結果(例如,基於字典中的密鑰)而有所不同。用'變量'名稱設置屬性

所以,我可能想說:

func.attrib = ['list'] 
OR 
func1.attrib = ['list'] 
OR 
func2.attrib = ['list'] 

其中funcfunc1func2是一個查找詞典的結果。

處理func作爲string和追加".attrib"將無法​​正常工作,所以我猜一個更具體的格式化方法是必需的。

任何幫助讚賞!

+0

你怎麼知道你是否應該使用func1,func2,func3等? –

+0

,它基於字典中的查找,基於密鑰。我並不打算將它包含在原始問題 – laszlopanaflex

+0

我的意思是,查找結果存儲在哪裏?結果是函數嗎?或者它是一個指示函數的字符串? –

回答

0

您是否考慮過使用if語句? 因爲如果查找是「Big Melons」,並且您必須使用func1.attrib,那麼您可以使用if或elif語句。

if look_up = "Big Melons": 
    func1.attrib = ["Lists"] 
elif look_up = "Small Melons": 
    func2.attrib = ["list"] 
+0

這是次優的,因爲可能有很多功能,這種類型的變量用法在一些方面需要。真正的問題是有沒有一種方法可以將字符串追加到屬性調用中。 – laszlopanaflex

+0

http://stackoverflow.com/q/3253966/5504999 試試看。我希望它能幫助你。 –

0

如果你想設置存儲爲dict值的函數的屬性,只是做了查找和設置屬性,例如

mydict = {'foo': func, 'bar': func1, 'baz': func2} 

key = ... get a key that is either 'foo', 'bar' or 'baz' ... 

mydict[key].attrib = ['list'] 

如果沒有這樣的dict存在,但你有問題的所有功能模塊的全局命名空間中定義,並且要根據函數名本身('func''func1'等屬性來分配),那麼你可以使用globals來獲取當前模塊的全局dict

# key is 'func', 'func1', or 'func2' 
globals()[key].attrib = ['list'] 

如果函數在其他模塊,你會使用getattr

# All the modules are in module spam 
import spam 

getattr(spam, key).attrib = ['list']