【问题标题】:A generator expression fails with maximum recursion depth生成器表达式以最大递归深度失败
【发布时间】:2012-08-05 16:11:02
【问题描述】:

考虑以下代码 sn-p(注意我使用的是全局,因为非本地关键字在 Python 2.7 中不可用)

def foo(L,K):
    global count
    count = 0
    def bar(f,L):
        global count
        for  e in L:
            if e - f == K or f - e == K: count += 1
            yield e
    try:
        while True:
            L = bar(L.next(),L)
    except StopIteration:
        return count
count=0
print foo((int(e) for e in some_string.split()),some_number)

在哪里

some_string: A space delimited integers
some_number: An integer

len(some_string) = 4000 时,上述代码失败并报错

RuntimeError: maximum recursion depth exceeded while calling a Python object

是因为内部嵌套的生成器是递归实现的吗?

【问题讨论】:

    标签: python recursion generator python-2.x


    【解决方案1】:

    您将L 替换为bar 的结果,它本身就是一个生成器。因此,您最终以递归嵌套生成器表达式的形式将bar 传递回bar

    这种构造最终会通过递归深度限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-17
      • 2013-03-15
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2011-01-09
      相关资源
      最近更新 更多