Python中如何让指定if判断逻辑仅执行一次?
解决方案
实现思路
新增布尔类型的执行状态标记,记录下单逻辑是否已经执行过,仅当标记为未执行状态时才进入条件判断,执行完成后更新标记状态,即可阻止后续重复触发。
基础实现方案
首先在逻辑外层初始化标记,仅执行一次初始化操作:
# 初始化执行标记,放在当前判断逻辑的外层作用域,不要重复初始化 order_placed_flag = False
修改原有逻辑,新增标记校验:
if not order_placed_flag and len(pos_df.columns) == 0 and len(ord_df.columns) == 0: for i in range(0,len(bricks_counts)): if bricks_counts[i] == -23 and red_neg == True: placeCoverOrder(ticker,"sell",quantity,high_down) print("sell order placed {}".format(ticker)) # 执行完成后更新标记,后续不再进入该逻辑 order_placed_flag = True break
函数内实现方案(避免全局变量污染)
如果这段逻辑封装在重复调用的函数内,可以用函数属性作为静态标记,不需要额外声明全局变量:
def order_exec_logic(): # 函数属性仅在第一次调用时初始化,后续调用不会重置 if not hasattr(order_exec_logic, 'order_placed_flag'): order_exec_logic.order_placed_flag = False if not order_exec_logic.order_placed_flag and len(pos_df.columns) == 0 and len(ord_df.columns) == 0: for i in range(0,len(bricks_counts)): if bricks_counts[i] == -23 and red_neg == True: placeCoverOrder(ticker,"sell",quantity,high_down) print("sell order placed {}".format(ticker)) order_exec_logic.order_placed_flag = True break
注意事项
- 标记变量的初始化必须放在重复执行的逻辑外层,不能每次进入判断逻辑前都重置为False,否则标记会失效
- 如果后续业务需要恢复触发权限,只需在对应逻辑处将标记重新赋值为
False即可
内容的提问来源于stack exchange,提问作者basudev patro
相关产品推荐
相关产品推荐

