gpt4 book ai didi

python - 用于重构 for 循环和嵌套 if 语句组合的生成器

转载 作者:行者123 更新时间:2023-12-01 03:39:58 26 4
gpt4 key购买 nike

下一个代码扫描一些日志文件并选择具有某些特定字符的行。

with open(file) as input:
for line in input:
if 'REW' in line or 'LOSE' in line:
<some optional code>
if 'REW VAL' in line or 'LOSE INV' in line:
<some code>

我在此基础上编写了一些函数,但每个函数都包含这些重复的代码,所以我认为需要重构。我想我需要制作一台发电机。如何制作这个生成器以允许我更改括号中的代码?

最佳答案

有时候重复并没有那么糟糕!

但无论如何你可以尝试这样的事情:

#!/usr/bin/env python
# script.py

def process_file(filename, func1, func2):
with open(filename) as f:
for line in f:
if '1' in line:
func1(line)
if '2' in line:
func2(line)


def main():
counters = {1: 0, 2: 0}
def func1(line):
# TODO Add some logic based on line value here
counters[1] += 1
def func2(line):
counters[2] += 1
process_file('table.csv', func1, func2)
return counters


if __name__ == '__main__':
print(main())

如果你有一个文件:

$ cat table.csv
1 just one
1 2 one and two
1
1
0
0
2
2 1
1 0 2
0

并运行脚本:

python script.py

您将得到下一个输出:

{1: 6, 2: 3}

您还可以分解 if 语句的谓词:

def process_file(filename, func1, func2, predicate1, predicate2):
with open(filename) as f:
for line in f:
if predicate1(line):
func1(line)
if predicate2(line):
func2(line)

def predicate1(line):
return 'REW' in line or 'LOSE' in line

不要忘记选择好听的函数名称!

关于python - 用于重构 for 循环和嵌套 if 语句组合的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39753217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com