python if else 的 Flag 无法正常工作

python if else with a Flag not working correctly

我正在尝试在我的 if else 语句中设置一个标志。我希望它是 1,如果它穿过上部阈值,但只有前一个信号之后的第一个交叉点,如果它穿过下部阈值(-1 在第一个下部交叉点),我希望它是 1。否则我希望它是 0.

所以我的逻辑被设置了一个标志。然后在第一个 sig cross (cond1) 上改变标志状态......所以它不会再次被触发......但现在能够在条件 2 下触发信号交叉,否则它应该为零......但它不起作用.

as is how i want
1 1
1 -1
1 1
1 -1
def is_triggered(row):
    flag = False
    
    if  flag == False and  ((row.D  >  row.UPPER) and (row.D_PREV < row.UPPER)) :
        return  1
    flag = True
    
    if  flag == True and ((row.D  <  row.LOWER) and (row.D_PREV > row.LOWER)):
         return -1
    flag = False
    
    return 0

您有一些状态没有作为参数传递给函数。

解决这个问题的一种方法是制作一个 class 来跟踪该状态:

class ConditionTracker:
    def __init__(self):
        self.flag = False
    def test_trigger(self, row):
        if not self.flag and row.D > row.UPPER and row.D_PREV < row.UPPER:
            self.flag = True
            return 1
        elif self.flag and self.D < row.LOWER and row.D_PREV > row.LOWER:
            self.flag = False
            return -1
        return 0

然后您将像这样创建一个实例:

tracker = ConditionTracker()

然后像这样使用它:

value = tracker.test_trigger(row)
#  value is now 1, -1 or 0