我继承了一个遗留代码库,里面有很多嵌套的 for 循环,看起来像:
def func(infile, some_other_data, outfile, status_variable):
with open(infile, 'r') as f:
with open(outfile, 'w') as outf:
for line in f:
# parse line
for element in some_other_data:
standard_function(line, element)
if status_variable == 'status_A':
function_A(line, element)
elif status_variable == 'status_B':
function_B(line, element)
# handle other possible status variables
outf.write(new_line)
此代码与性能相关。为了加快速度(除了其他更改之外),我想摆脱所有被调用 n*m 次的 if 子句,测试表明这确实提供了 10% 的改进。
为此,我简单地为每个可能的状态变量复制并修改了主循环函数,并相应地调用了不同的函数。这有效地将 if 子句移到了循环之外。但是,它非常丑陋,并且使库变大了 4 倍。
是否有一种(相当)简单的 pythonic 方法来处理这种情况,我想重用样板循环,只是改变每次迭代所做的事情,而不是每次都处理条件?
我一直在玩装饰器,根据状态变量动态返回循环函数调用不同的子函数,但从可读性的角度来看,最终结果看起来很糟糕。我绝不是 Python 专家,所以我可能会忽略一些在这里可能有用的方便的高级功能。
任何建议都非常感谢。
噜噜哒
倚天杖
绝地无双
随时随地看视频慕课网APP
相关分类