【问题标题】:Return multiple "while" loop results返回多个“while”循环结果
【发布时间】: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 和后续两节以获取说明。

标签: python list loops while-loop


【解决方案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,它就不会继续进行进一步的循环迭代。

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 2013-10-27
      • 2019-06-07
      • 2014-07-13
      • 1970-01-01
      • 2022-11-30
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多