2 回答

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊
您當(dāng)前的設(shè)置
class A:
def run(self):
exit = False
def walk():
global exit
exit = True
walk()
print(exit)
a = A()
a.run() # False
print(exit) # True
打印False是因為exit您在里面打印的內(nèi)容run在 范圍內(nèi)run,它不是全局變量。您實際上是在設(shè)置一個全局變量exitin walk- 請參閱第二次調(diào)用printGive True。
您想要的global是nonlocal讓您修改自由變量的關(guān)鍵字。global然而,讓我們檢查一下沒有首先會發(fā)生什么。
class A:
def run(self):
exit = False
def walk():
exit = True
walk()
print(exit)
a = A()
a.run() # False
代碼打印False是因為run不關(guān)心在walk. 加上nonlocal然而
class A:
def run(self):
exit = False
def walk():
nonlocal exit
exit = True
walk()
print(exit)
a = A()
a.run() # True
代碼將輸出True,因為exit = True現(xiàn)在exit正在 的封閉非局部范圍內(nèi)設(shè)置變量run。
您應(yīng)該為其他上下文研究的關(guān)鍵主題是閉包和自由變量。

TA貢獻(xiàn)1773條經(jīng)驗 獲得超3個贊
您可以在nonlocal此處使用關(guān)鍵字。一探究竟:
>>> def run():
... e=False
... print(e)
... def walk():
... nonlocal e
... e=True
... print(e)
... walk()
... print(e)
...
>>> run()
False
True
True
然而,這是非常糟糕的形式!讓變量exit成為 A 類的屬性是標(biāo)準(zhǔn)的。
class A():
def __init__(self):
self.exit = False
def run(self):
self.exit = False
def walk():
#DoStuff with self.exit variable
self.exit = True
walk()
print(self.exit)
順便說exit一句,是 Python 中的保留關(guān)鍵字,因此如果您不想破壞語言,則應(yīng)避免為變量指定該名稱。
添加回答
舉報