我想在文件p2.py中設置全局變量x的值。然後,這個值將在p1.py中使用。但是,p的值沒有在p1.py中更改。我曾嘗試使用全局關鍵字。
誰能告訴我什麼是錯在此代碼:
在Python中設置跨文件的全局變量
p2.py
x=''
def set_vals():
global x
x='a'
p1.py
from p2 import *
set_vals()
global x
print x
感謝
我想在文件p2.py中設置全局變量x的值。然後,這個值將在p1.py中使用。但是,p的值沒有在p1.py中更改。我曾嘗試使用全局關鍵字。
誰能告訴我什麼是錯在此代碼:
在Python中設置跨文件的全局變量
p2.py
x=''
def set_vals():
global x
x='a'
p1.py
from p2 import *
set_vals()
global x
print x
感謝
一旦你有進口from p2 import *
,你會得到一個p1的本地副本。這不是與p2中完全相同的x ...它現在是p1中的局部變量'x',它也指向與p2中的'x'相同的對象。
p中的p2.x
和x
都是在import p2
之後立即引用同一個實體。但是,運行set_vals()
時,它僅更改p2模塊內部的x
(重新指定指針)的值。 p1模塊內的x仍然指向舊的東西。
set_vals函數及其全局x仍然是p2模塊的一部分,即使它們已被導入到p1中。因此,它們只會影響p2中x的值。發生這種情況是因爲函數記住了它們的創建範圍(閱讀關閉以瞭解更多信息)。
你可以試試這個,這將做什麼,我們期待......
import p2
print p2.x
p2.set_vals()
print p2.x # p2.x will change
你的代碼等同於...
import p2
x = p2.x
set_vals = p2.set_vals
del p2
set_vals() # changes p2.x
global x
print x # this and p2.x are not same anymore
它清楚地表明在P1的x
是單獨的變量最初指向與p2中的'x'相同的對象。更改p2.x
指針不會改變p1
指向的x
。 p1中的'x'一直指向與最初相同的東西。