[英]Setting variables with exec inside a function
我剛開始自學 Python,我需要一些關於這個腳本的幫助:
old_string = "didnt work"
new_string = "worked"
def function():
exec("old_string = new_string")
print(old_string)
function()
我想得到它old_string = "worked"
。
您快到了。 您正在嘗試修改全局變量,因此您必須添加global
語句:
old_string = "didn't work"
new_string = "worked"
def function():
exec("global old_string; old_string = new_string")
print(old_string)
function()
如果您運行以下版本,您將看到您的版本中發生了什么:
old_string = "didn't work"
new_string = "worked"
def function():
_locals = locals()
exec("old_string = new_string", globals(), _locals)
print(old_string)
print(_locals)
function()
輸出:
didn't work
{'old_string': 'worked'}
你運行它的方式,你最終試圖在exec
中修改函數的局部變量,這基本上是未定義的行為。 請參閱exec
文檔中的警告:
注意:默認locals的行為如下面函數
locals()
所述:不應嘗試修改默認locals字典。 如果您需要在函數exec()
返回后查看代碼對局部變量的影響,請傳遞顯式局部變量字典。
以及有關locals()
的相關警告:
注意:不得修改本詞典的內容; 更改可能不會影響解釋器使用的局部變量和自由變量的值。
作為讓exec
從函數內部更新全局變量的另一種方法是將globals()
傳遞給它。
>>> def function(command):
... exec(command, globals())
...
>>> x = 1
>>> function('x += 1')
>>> print(x)
2
與locals()
不同,更新globals()
字典應該總是更新相應的全局變量,反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.