2017-05-26 53 views
0

我试图在每次某个值保持不变时更新一个计数器变量。全局命名空间中的Python变量没有通过类命名空间中的函数中的增强赋值来更新

的主要条件是:

streak = 0 
entryno_counter = 1 

class OtherDataGet: 
streak_type = 3 
uod_state = 3 

    @staticmethod 
    def uod(): 
     global streak 
     if entryno_counter == 1: 
      pass 
     else: 
      if values[1] > values_cache[1]: # If value went up 
       if OtherDataGet.uod_state == 1 or 2: # If it was previously down or same 
        OtherDataGet.uod_state = 0 # Set state to up 
        streak = 0 # Reset streak 
        OtherDataGet.streak_type = 0 # Set streak type to up 
       elif OtherDataGet.uod_state == 0: # If last state was up 
        streak += 1 # Add one to streak counter 
       return 0 
      elif values[1] < values_cache[1]: 
       if OtherDataGet.uod_state == 0 or 2: 
        OtherDataGet.uod_state = 1 
        streak = 0 
        OtherDataGet.streak_type = 1 
       elif OtherDataGet.uod_state == 1: 
        streak += 1 
       return 1 
      elif values[1] == values_cache[1]: 
       if OtherDataGet.uod_state == 0 or 1: 
        OtherDataGet.uod_state = 2 
        streak = 0 
        OtherDataGet.streak_type = 2 
       elif OtherDataGet.uod_state == 2: 
        streak += 1 
       return 2 

正在更新的变量是在全局名字空间,无处不访问,所以应该在更新它没有问题。

例如,当第一次返回2时,条纹计数器设置为0,第二次返回2,应该设置为1,第三次返回2,应该是一个3等

1,125519,0,182701,4,404,0,1
2,125519,2,182702,4,404,2,1
3,125518,1,182703 ,4,404,1,1
4,125519,0,182704,4404,0,1
5,125519,2,182705,4,404,2,1
6,125519,2,182706,4,404,2,1
7,125519,2,182706,4,404,2,1
8,125519,2,182707,4,404,2,1
9,125517,1,182708,4,404,1,1-
10,125518,0,182709,4,404,0, 1
11,125517,1,182710,4,404,1,1

这是输出数据,你需要看的只是最后两列。倒数第二位是OtherDataGet.uod的返回值,最后一位应该是streak。如果你看第5-8行,有一条2s的线,最后一行的值应该分别为1,2,3,4,但它应该保持为1,即使它应该被重置为0.

+0

[比创建它们的另一个函数中使用全局变量]的可能的复制(HTTPS:/ /stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-c​​reated-them) –

回答

0

当您尝试在函数内部分配一个全局变量时,它会改为创建一个局部变量。为防止发生这种情况,请在函数中使用关键字global

在这种情况下,这将是:

def uod(): 
    global streak, entryno_counter 

而其余的为正常。 。

+0

我的不好,代码被复制时出现错误,它在函数的顶部被声明为全局的,并且仍然不起作用。 –

0

只是全球声明变量的任何函数内要在使用它EG:

def uod(): 
    global streak