我想寫一個函數,它接收一個本地命名空間字典並更新它。事情是這樣的:從函數內部更新當地人
def UpdateLocals(local_dict):
d = {'a':10, 'b':20, 'c':30}
local_dict.update(d)
當我打電話從交互式Python殼它的工作原理沒事此功能,像這樣:
a = 1
UpdateLocals(locals())
# prints 20
print a
然而,當我打電話UpdateLocals
從一個函數裏面,這不是」 t做我期望的:
def TestUpdateLocals():
a = 1
UpdateLocals(locals())
print a
# prints 1
TestUpdateLocals()
我該如何使第二種情況像第一種情況一樣工作?
UPDATE:
Aswin的解釋是有道理的,是對我很有幫助。但是我仍然想要一個機制來更新局部變量。之前,我想出一個不太難看的辦法,我要做到以下幾點:
def LoadDictionary():
return {'a': 10, 'b': 20, 'c': 30}
def TestUpdateLocals():
a = 1
for name, value in LoadDictionary().iteritems():
exec('%s = value' % name)
當然串語句的結構可以實現自動化,細節可以從用戶隱藏。
爲什麼你甚至想這樣做? [本詞典的內容不應修改;更改可能不會影響解釋器使用的本地變量和自由變量的值._](https://docs.python.org/2.7/library/functions.html?highlight=locals#locals) – Alik
我明白了。謝謝!那麼我怎樣才能更新函數內的變量的本地字典?這是我正在尋找的。 – shaoyl85
你想要達到什麼目標? [XY問題](http://meta.stackexchange。com/a/66378) – Alik