2 回答
TA贡献1836条经验 获得超5个赞
您当前的设置
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您在里面打印的内容run在 范围内run,它不是全局变量。您实际上是在设置一个全局变量exitin walk- 请参阅第二次调用printGive True。
您想要的global是nonlocal让您修改自由变量的关键字。global然而,让我们检查一下没有首先会发生什么。
class A:
def run(self):
exit = False
def walk():
exit = True
walk()
print(exit)
a = A()
a.run() # False
代码打印False是因为run不关心在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现在exit正在 的封闭非局部范围内设置变量run。
您应该为其他上下文研究的关键主题是闭包和自由变量。
TA贡献1773条经验 获得超3个赞
您可以在nonlocal此处使用关键字。一探究竟:
>>> def run():
... e=False
... print(e)
... def walk():
... nonlocal e
... e=True
... print(e)
... walk()
... print(e)
...
>>> run()
False
True
True
然而,这是非常糟糕的形式!让变量exit成为 A 类的属性是标准的。
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 中的保留关键字,因此如果您不想破坏语言,则应避免为变量指定该名称。
添加回答
举报