问题描述
我创建了一个虚拟数据管道,它从日志文件中读取数据并将过滤器(虚拟过滤器)应用于它。我很难理解这个程序的输出(流程)。
问题 在 'process' 函数的 for 循环中,我们循环遍历每个过滤器。现在在循环中,当我们处于 filter1 时,我预计程序流将转移到 filter1 函数,它将在移动到循环内的下一个过滤器之前执行。因此,根据我在 filter1 之后的循环中的说法,程序流应该进入 filter1 函数内部,但输出显示该程序仅生成一个 filter1 生成器对象,然后直接循环到下一个过滤器,而无需先执行 filter1。同样,在从 process 函数中的 for 循环出来后,程序在进入 filter1 并执行它之前先进入 filter2。我不明白这里到底发生了什么。如果您能解释此代码的工作原理及其与输出相关的控制流程,那就太好了。
代码:日志类有两个过滤功能,可以做一些过滤工作。首先,我正在初始化一个虚拟文件,这里它只是一个包含两个字符串的列表,然后我添加了两个虚拟过滤器,它们在进程函数内部的循环中应用于文件
class LogProcessor(object):
def __init__(self,file):
self._file = file
self._filters = []
def add_filter(self,new_filter):
if callable(new_filter):
self._filters.append(new_filter)
def process(self):
print("inside process function")
pipeline = self._file
print("pipeline = ",pipeline)
#looping over filters
for new_filter in self._filters:
print("inside for loop looping over filters with current filter = ",new_filter)
pipeline = new_filter(pipeline)
print("outside filter loop")
return pipeline
def filter1(lines):
print("inside filter1 function with lines = ",lines)
for line in lines:
print("inside for loop parser with line = ",line)
yield line
print("outside parser filter for loop")
def filter2(lines):
print("inside filter2 function with lines = ",lines)
for line in lines:
print("inside lo0p status filter,line - ",line)
yield line
print("outside status filter for loop")
log = ['honey','ankita']
processor = LogProcessor(log)
# this is the order we want the functions to run
processor.add_filter(filter1)
processor.add_filter(filter2)
#process() returns the generator pipeline
print("starting the main loop")
for line in processor.process():
print("inside the main loop")
print(line)enter code here
这是程序的输出
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)