遍历列表时应使用全局变量还是在函数间传递每行参数?
问题解答
最终建议
优先选择方案A的参数传递实现,完全不推荐方案B的全局变量写法
两个实现方案参考
方案A(参数传递)
def iterate_over_list(): list_ = [ 1,2,3 ] for each_row in list_: func_a(each_row) func_b(each_row) func_c(each_row) def func_a(each_row): # 读取行数值并做决策 pass def func_b(each_row): # 读取行数值并做决策 pass def func_c(each_row): # 读取行数值并做决策 pass
方案B(全局变量)
global list_ def iterate_over_list(): list_ = [ 1,2,3 ] for each_row in list_: func_a() func_b() func_c() def func_a(): # 读取行数值并做决策 pass def func_b(): # 读取行数值并做决策 pass def func_c(): # 读取行数值并做决策 pass
选择方案A的核心原因
- 可复用性更高:三个功能函数完全独立,仅依赖传入的参数运行,后续如果需要单独调用函数处理其他数值、或者扩展处理多组列表,直接传对应参数即可,不需要额外修改逻辑。方案B的函数和全局变量深度绑定,几乎无法在其他场景复用,适配多组数据的成本极高。
- 调试排查成本低:仅看函数定义就能明确知道函数需要的输入,出问题时只要确认调用时传入的
each_row值就能快速定位问题。如果使用方案B,出问题时还需要额外排查全局变量的当前状态、之前被哪些逻辑修改过,排查难度成倍提升。 - 无并发安全隐患:如果后续需要扩展多线程同时处理多个列表,方案A的传参方式完全不会有冲突,每个函数拿到的都是调用时传入的确定值。方案B的全局变量会被多个执行流程同时修改,函数读取到的值完全不可控,会出现大量难以复现的异常。
你当前的场景中三个函数都仅读取行内容不做修改,方案A的传参方式完全可以覆盖需求,完全没有必要引入全局变量带来的额外风险。
内容的提问来源于stack exchange,提问作者Bruce Banner
相关产品推荐
相关产品推荐

