无法访问函数中全局变量的值,而不是初始化它

2024-04-19 04:39:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个为实时系统编写的python代码,其中我从一个函数获取数据并将其赋给一个实际上是全局变量的变量,但当我试图在其他函数中使用它时,我无法在其他函数中获得更新值。如何解决这个问题。下面的示例代码将详细说明我到底在做什么。在

obtained_value = 0 

### Inside the continuous loop statement ###
def Startloop(self):
    global obtained_value
    obtained_value = acquire_data()  ## obtained value is getting updated after every 0.25 seconds ##
    ## other statements ##

def some_functions(self):
    ### want to do something which depend on value ###
    print obtained_value             ## does not print value inside "obtained_value"
    val1 = obtained_value * 10
    print val1
    ## etc etc ### 

我没有在some\u函数中打印与print语句对应的任何值。似乎全局变量的值没有更新。如何解决这个问题。如有任何建议,我们将不胜感激。提前谢谢。在


Tags: the函数代码self示例value系统def
2条回答

那么Startloop和{}是实例方法,比如说Xyz类。在

如果希望obtained_value成为类变量,该变量在类的对象(实例)之间共享,请首先在类中分配它:

class Xyz(object):
    obtained_value = 0.0

    def Startloop(self):
        self.obtained_value = acquire_data()  ## obtained value is getting...
        ## other statements ##

    def some_functions(self):
        ### want to do something which depend on value ###
        print self.obtained_value             ## does not print value...
        val1 = self.obtained_value * 10
        print val1

否则,如果希望obtained_value是属于类的特定对象(实例)的对象变量,则在其构造函数中指定它:

^{pr2}$

关键是Python有名称空间的概念(请继续阅读,不要害怕!) 在第一种情况下,obtained_value被分配给类的名称空间。 在第二种情况下,obtained_value被分配给对象的名称空间。 obtained_value只是添加到适当名称空间的名称。在

如您所见,obtained_value在这两种情况下都是通过self.obtained_value来达到的。这是因为Python在对象的名称空间中查找obtained_value。如果找不到它,Python会在对象类的命名空间中查找它。在

这个答案并非详尽无遗,但我希望能有所帮助。 以防万一,请看官方的docs。在

再读这两行:

global value
obtained_value = acquire_data()

扰流板:

^{pr2}$

相关问题 更多 >