Python: 如何从 for 循环中 return 数据?

Python: How to return data from a for loop?

我的目标是使用 Dash 创建一个实时图表,显示批处理作业执行重复性任务所需的时间。该图将从批处理作业的日志文件中获取数据,它会在其中查找一些特定的单词。

问题是当我想在图表中显示数据时,它只显示第一个值,而不显示后面的值。

我宁愿将它放在两个单独的函数中,但由于我在处理图表时遇到了问题,所以我现在选择将它放在同一个函数中。

def update_graph():
    specific_word = "help"

    for i,line in enumerate(lines):
        if specific_word in line:

            X.append(int(count))
            Y.append(int(time))

            data = go.Scatter(
                x = list(X),
                y = list(Y),
                name = 'Scatter',
                mode = 'lines+markers'
                )

            return {'data':[data], 
            'layout': go.Layout(xaxis = dict(range=[min(X), max(X)]),
                                yaxis = dict(range=[min(Y), max(Y)]))}

我得到的结果只是日志文件中的第一个值,而不是以下值。

当我用 print(data) 替换 return 行并在终端中执行函数时,我得到了我正在寻找的结果。

提前致谢!

问题是 python 在 return 输入第一个值后退出函数。

您可以将要查看的所有值添加到列表中,然后 return 改为:

def update_graph():
    specific_word = "help"
    output = []  # the list output will store all the data
    for i,line in enumerate(lines):
        if specific_word in line:

            X.append(int(count))
            Y.append(int(time))

            data = go.Scatter(
                x = list(X),
                y = list(Y),
                name = 'Scatter',
                mode = 'lines+markers'
                )

            output.append({'data':[data],  #add the values to the list
            'layout': go.Layout(xaxis = dict(range=[min(X), max(X)]),
                                yaxis = dict(range=[min(Y), max(Y)]))})
    return output 

所以你会得到一个列表作为 return 值。

您可以遍历列表以获取您想要的任何元素:

thelist = update_graph()

for item in thelist:
    print(item)
    #do whatever you want with the item here

A return 语句从 loop.So 中断,这不允许 for 循环继续执行。 要解决此问题,您可以将数据存储在 for 循环内,并将 return 语句放在函数外。

你可以试试这个 -

array_name.append( {'data':[data], 
            'layout': go.Layout(xaxis = dict(range=[min(X), max(X)]),
                                yaxis = dict(range=[min(Y), max(Y)]))})