簡體   English   中英

在函數中使用 exec 設置變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM