猿问

更新方法内函数内的全局变量

我在这样的类的方法中有一个函数:


class A():               

    def run(self):


        exit=False


        def walk():

             global exit

             #DoStuff - change exit variable

        walk()

        print(exit)

现在,该函数walk应该更改exit变量。但是这个变量总是False像 set before 一样在函数之外。如果此函数将此变量设置为 ,我如何更改此变量用作标志以在函数外部访问它True?我对这个变量的范围很困惑。我使用 python 3.6。


猛跑小猪
浏览 119回答 2
2回答

一只甜甜圈

您当前的设置class A:    def run(self):        exit = False        def walk():             global exit             exit = True        walk()        print(exit)a = A()a.run() # Falseprint(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。您应该为其他上下文研究的关键主题是闭包和自由变量。

慕容3067478

您可以在nonlocal此处使用关键字。一探究竟:>>> def run():...   e=False...   print(e)...   def walk():...     nonlocal e...     e=True...     print(e)...   walk()...   print(e)...>>> run()FalseTrueTrue然而,这是非常糟糕的形式!让变量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 中的保留关键字,因此如果您不想破坏语言,则应避免为变量指定该名称。
随时随地看视频慕课网APP

相关分类

Python
我要回答