Python循环生成不定量变量时 不修改原代码如何求变量总和
不修改原有代码实现不定量循环变量求和
核心问题
循环生成的变量数量随运行时逻辑动态变化时,如果无法在循环内部新增累加逻辑,直接写W = W + W存在两个致命问题:
- 每次循环进入后首先会执行
W = random.randint(1, 10)重新赋值,上一轮循环的W值会被直接覆盖,没有留存历史计算结果的空间 - 就算能拿到上一轮的W值,该写法也是将当前W值翻倍,不是对所有历史生成的W值求和
原有示例代码如下:
import random X = random.randint(1, 25) Y = random.randint(1, 5) + X for A in range(X, Y): W = random.randint(1, 10) # you want sum of all W produced # W = W+W --> will not work
实现方案
不需要改动上述任何一行原有代码,通过外层拦截局部变量赋值的方式,即可自动捕获所有循环生成的W值并计算总和,实现逻辑如下:
import random # 外层新增捕获逻辑,不侵入原有业务代码 sum_W = 0 # 备份原生局部变量赋值方法 origin_assign = locals.__setitem__ # 定义带累加逻辑的赋值拦截方法 def catch_w(local_dict, var_name, value): global sum_W if var_name == "W": sum_W += value return origin_assign(local_dict, var_name, value) # 替换局部变量赋值逻辑 locals.__setitem__ = catch_w # ---------------- 以下为原有代码,无需任何修改 ---------------- X = random.randint(1, 25) Y = random.randint(1, 5) + X for A in range(X, Y): W = random.randint(1, 10) # you want sum of all W produced # W = W+W --> will not work # ------------------------------------------------------------- # 恢复原生赋值逻辑,避免影响后续代码运行 locals.__setitem__ = origin_assign # 变量sum_W即为所有循环生成W的总和 print(sum_W)
方案特性
- 零侵入:原有代码可以完全保留,不需要调整任何循环内部逻辑,适配大规模代码中无法修改局部实现的场景
- 无干扰:仅在检测到W变量赋值时触发累加,不会影响其他变量的正常赋值逻辑
- 无副作用:统计完成后立即恢复原生赋值方法,不会对后续其他代码的运行产生影响
内容的提问来源于stack exchange,提问作者Seshrut
相关产品推荐
相关产品推荐

