我有這個檔案名為mainClass.py:
summed = 3
class myClass:
def test1(self):
print(summed)
summed = 5
我可以列印summed變數,但不能修改它。為什么?
uj5u.com熱心網友回復:
summed在主級別是一個全域變數。如果要訪問全域變數,請添加global summed到函式中。
在posted函式中,列印summed后跟區域賦值會報錯:
UnboundLocalError: local variable 'summed' referenced before assignment,因為函式中的變數由于賦值陳述句變成了區域變數summed = 5。如需進一步說明,請參閱常見問題解答。
summed = 3'
class myClass:
def test1(self):
global summed
print(' test1:', summed)
summed = 5 # updates global summed variable
def test2(self):
summed = 10 # this is a local summed variable
print(' test2:', summed)
print("main:", summed)
a = myClass()
a.test1()
print("main:", summed)
a.test2()
print("main:", summed)
輸出:
main: 3
test1: 3
main: 5
test2: 10
main: 5
呼叫test1()函式后,summed值更改為,5但呼叫test2()更改的是區域summed變數而不是全域變數,因此值保持為 10。
uj5u.com熱心網友回復:
您正在列印的總和變數是全域總和,即 3,如果您想列印類總和變數(或修改它),您應該添加 self. 像這樣的變數:
summed = 3
class myClass:
def test1(self):
print(self.summed)
summed = 5
現在,如果您像這樣修改 sumsum
c = myClass()
c.summed = 6
c.test1()
它將列印 6。如果您想更改全域 summed 變數,只需向其中添加 global 關鍵字,如下所示: summed = 3
class myClass:
def test1(self):
print(self.summed)
global summed
summed = 12
這將改變全域變數的值。
uj5u.com熱心網友回復:
python認為它是一個區域變數并產生UnboundLocalError: local variable 'summed' referenced before assignment你應該將你的代碼更改為
summed = 3
class myClass:
def test1(self):
global summed
print(summed)
summed = 5
myClass().test1()
print(summed)
它現在會認為總和為一個全域變數并列印
3
5
uj5u.com熱心網友回復:
如果函式分配給變數*,則假定該變數是區域變數,即使存在同名的全域變數也是如此。
如果你想讓函式使用全域變數,你必須使用global關鍵字。
def test1(self):
global summed
# all references to 'summed' in this function will use the global variable
...
*即使分配在不執行的分支中也是如此 - 即使在無法執行的分支中!
例如:
A = 5
def foo():
if False:
A = 4
else:
print(A)
foo()
此代碼將在print(A).
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468307.html
