Python 中的推导式会在后台调用函数吗?

问题描述 投票:0回答:1

我使用递归定义了以下阶乘函数:

def factorial(n):
    if n == 0:
        return n
    else:
        return n*factorial(n-1)

然后,我定义了以下函数来返回调用

factorial
函数时引发 RecursionError 的最小值。 (我已经为此导入了
sys
模块)

def test_recursion(n):
    sys.setrecursionlimit(n)
    num = 0
    while True:
        try:
            x = factorial(num)
            num += 1
        except:
            return num

我知道这个函数有点误导,因为调用

test_recursion
函数本身占用了调用堆栈中的一个槽位。

现在,如果我创建列表

l1
,如下所示:

l1 = []
for i in [10,11,12]:
    l1.append(test_recursion(i))

l2
应该是等效列表,通过使用列表理解来制作

l2 = [test_recursion(i) for i in [10,11,12]]

现在,

print(l1, l2, sep = "\n"
给出以下输出:

[7,8,9]
[6,7,8]

为什么会出现这种情况?字典和集合推导式也会发生这种情况。

推导式是否在后台调用某个函数,该函数占用了堆栈中的一个槽?理解的内部实现如何解释这一点?

python list list-comprehension sys
1个回答
-1
投票

Для того чтобы понять список чисел в строке кода должен присутствовать модуль 数学 вам даже не следует делать вычисления по числам всё это будет работать автоматически если можно так сказать

© www.soinside.com 2019 - 2024. All rights reserved.