Python:如何从for循环返回数据?

时间:2019-05-04 14:33:32

标签: python loops graph plotly plotly-dash

我的目标是使用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)替换回车线并在终端中执行该功能时,我得到了我想要的结果。

谢谢!

2 个答案:

答案 0 :(得分:0)

问题在于python返回第一个值后退出函数。

您可以将要查看的所有值添加到列表中,然后将其返回:

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 

因此,您将获得一个列表作为返回值。

您可以遍历列表以获取所需的任何元素:

thelist = update_graph()

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

答案 1 :(得分:0)

return语句退出循环,因此这不允许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)]))})