Python 如何将循环每次迭代的值返回到它所运行的函数中?

Python 如何将循环每次迭代的值返回到它所运行的函数中?,python,json,function,loops,Python,Json,Function,Loops,我正在制作一个程序,从实时信息服务器上抓取本地公交车时间并打印出来。为了返回所有总线时间,它执行以下操作: while i < len(info["results"]): print "Route Number:" + " " + info['results'][i]['route'] print "Due in" + " " + info["results"][i]["duetime"] + " " + "minutes." + "\n" i = i + 1 而

我正在制作一个程序,从实时信息服务器上抓取本地公交车时间并打印出来。为了返回所有总线时间,它执行以下操作:

while i < len(info["results"]):
    print "Route Number:" + " " + info['results'][i]['route']
    print "Due in" + " " + info["results"][i]["duetime"] + " " + "minutes." + "\n"
    i = i + 1
而我
这工作正常,并逐个返回所有结果,如下所示:

路线:83 12分钟后交

路线:83 25分钟后交

路线:83A 39分钟后到

路线:83 55分钟后到

但是,当我在另一个脚本中使用此功能时,我将代码转换为获取时间并将其返回到函数中:

def fetchtime(stopnum):
    data = "?stopid={}".format(stopnum)+"&format=json"
    content = "https://data.dublinked.ie/cgi-bin/rtpi/realtimebusinformation"
    req = urllib2.urlopen(content + data + "?")

    i = 0 
    info = json.load(req)

    if len(info["results"]) == 0:
        return "Sorry, there's no real time info for this stop!"

    while i < len(info["results"]):
        return "Route Number:" + " " + str(info['results'][i]['route']) + "\n" + "Due in" + " " + str(info["results"][i]["duetime"]) + " " + "minutes." + "\n"
        i = i + 1 
def fetchtime(stopnum):
data=“?stopid={}”.format(stopnum)+“&format=json”
内容=”https://data.dublinked.ie/cgi-bin/rtpi/realtimebusinformation"
req=urllib2.urlopen(内容+数据+“?”)
i=0
info=json.load(请求)
如果len(信息[“结果])==0:
return“对不起,此站没有实时信息!”
而我

这是可行的,但是它只返回服务器给出的列表中的第一条总线,而不是返回可能有多少条总线。如何获得函数的打印结果,以返回循环每次迭代中提供的信息?

您是否可以创建一个列表并返回该列表

businfo = list()
while i < len(info["results"]):
    businfo.append("Route Number:" + " " + str(info['results'][i]['route']) + "\n" + "Due in" + " " + str(info["results"][i]["duetime"]) + " " + "minutes." + "\n")
    i = i + 1 

return businfo
businfo=list()
而我

您必须编辑此函数返回的打印命令

你能不能先列一个清单,然后把清单还给我

businfo = list()
while i < len(info["results"]):
    businfo.append("Route Number:" + " " + str(info['results'][i]['route']) + "\n" + "Due in" + " " + str(info["results"][i]["duetime"]) + " " + "minutes." + "\n")
    i = i + 1 

return businfo
businfo=list()
而我

您必须编辑此函数返回的打印命令

我建议您使用yield语句,而不是fetchtime函数中的return

比如:

def fetchtime(stopnum):
    data = "?stopid={}".format(stopnum)+"&format=json"
    content = "https://data.dublinked.ie/cgi-bin/rtpi/realtimebusinformation"
    req = urllib2.urlopen(content + data + "?")

    i = 0 
    info = json.load(req)

    if len(info["results"]) == 0:
        yield "Sorry, there's no real time info for this stop!"

    while i < len(info["results"]):
        yield "Route Number:" + " " + str(info['results'][i]['route']) + "\n" + "Due in" + " " + str(info["results"][i]["duetime"]) + " " + "minutes." + "\n"
        i = i + 1 

我建议您使用yield语句,而不是fetchtime函数中的return

比如:

def fetchtime(stopnum):
    data = "?stopid={}".format(stopnum)+"&format=json"
    content = "https://data.dublinked.ie/cgi-bin/rtpi/realtimebusinformation"
    req = urllib2.urlopen(content + data + "?")

    i = 0 
    info = json.load(req)

    if len(info["results"]) == 0:
        yield "Sorry, there's no real time info for this stop!"

    while i < len(info["results"]):
        yield "Route Number:" + " " + str(info['results'][i]['route']) + "\n" + "Due in" + " " + str(info["results"][i]["duetime"]) + " " + "minutes." + "\n"
        i = i + 1 

return
终止函数的执行:因此在第一次迭代时函数终止。这是一个非常根本的错误。我建议您学习python教程并阅读它,因为它不仅会回答您的这个问题,还会回答许多其他问题。请特别注意,将值打印到标准输出和返回值是两件截然不同的事情。
return
终止函数的执行:因此在第一次迭代时,函数终止。这是一个非常根本的错误。我建议您学习python教程并阅读它,因为它不仅会回答您的这个问题,还会回答许多其他问题。特别是看一下将值打印到标准输出和返回值是两件截然不同的事情。