返回多个“while”循环结果

Posted

技术标签:

【中文标题】返回多个“while”循环结果【英文标题】:Return multiple "while" loop results 【发布时间】:2013-12-18 21:18:54 【问题描述】:

我有一个将数据返回给函数的 while 循环。

    while (count < int(pagecount)):
        count = count + 1
        request = requestGet("http://www.site.com/User.aspx?ID=0&page=1".format(self.userid, count))
        regexdata = re.findall('REGEX" REGEX="(.*?)"', request)
        return regexdata

我需要知道如何将每个值返回给 while 循环所在的函数。此外,更具体地说,我返回的数据实际上是在一个列表中。因此,也许以某种方式将新列表附加到旧列表中会是一种更好的方法。不管怎样,我迷路了,我需要帮助。

谢谢。

【问题讨论】:

“将每个值返回给 while 循环所在的函数……”正是生成器的用途。请参阅教程中的Iterators 和后续两节以获取说明。 【参考方案1】:

您可以使用Generator:

def getRegexData(self):     
    while (count < int(pagecount)):
        count = count + 1
        request = requestGet("http://www.site.com/User.aspx?ID=0&page=1".format(
                            self.userid, count))
        yield re.findall('REGEX" REGEX="(.*?)"', request)

【讨论】:

【参考方案2】:

如果你想返回一堆东西,把它们放在一个列表中然后返回:

results = []
while (count < int(pagecount)):
    count = count + 1
    request = requestGet("http://www.site.com/User.aspx?ID=0&page=1".format(self.userid, count))
    regexdata = re.findall('REGEX" REGEX="(.*?)"', request)
    results.append(regexdata)
return results

或者,可能适合yield 结果,将您的函数变成生成器:

while (count < int(pagecount)):
    count = count + 1
    request = requestGet("http://www.site.com/User.aspx?ID=0&page=1".format(self.userid, count))
    regexdata = re.findall('REGEX" REGEX="(.*?)"', request)
    yield regexdata

这两个选项都允许您遍历返回值以获取元素,但生成器选项只允许您这样做一次。 return 会立即停止函数,因此一旦你的函数遇到 return,它就不会继续进行进一步的循环迭代。

【讨论】:

以上是关于返回多个“while”循环结果的主要内容,如果未能解决你的问题,请参考以下文章

在 while 循环中使用 -- 运算符会产生意想不到的结果

Java 流程控制

Shell之三

如何php调用oracle存储过程返回的是一个结果集,该怎么从php页面中吧数据循环输出呀

红帽考试学习第六记

我如何编写一个接受整数并使用while循环返回前n个偶数之和的函数function(n)?