全局命名空间中的Python变量未通过类namesp中函数的增广赋值进行更新

2024-10-04 01:23:06 发布

您现在位置: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,依此类推

1125519,0182701,4404,0,1
2125519,2182702,4404,2,1
3125518,1182703,4404,1,1
4125519,0182704,4404,0,1
5125519,2182705,4404,2,1
6125519,2182706,4404,2,1
7125519,2182706,4404,2,1
8125519,2182707,4404,2,1
9125517,1182708,4404,1,1
10125518,0182709,4404,0,1
11125517,1182710,4404,1,1

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


Tags: orcacheiftypecounter计数器条纹state
2条回答

只需在任何要使用该变量的函数中全局声明该变量。例如:

def uod():
    global streak

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

在这种情况下,这将是:

def uod():
    global streak, entryno_counter 

其余的正常

相关问题 更多 >