我最近研究了python递归函数,发现当递归使用[]中的element时,递归停止。所以我做了一个简单的测试功能,发现甚至没有打印出来。那么我如何理解[]中的元素?为什么在引用[]中的元素时函数会停止?
b=1
def simple():
for i in []:
print('i am here')
return i+b
a = simple()
答案 0 :(得分:1)
Python的in
关键字有两个用途。
作为for
循环的一部分,作为for element in iterable
循环的一部分。这会在每次通过循环主体时将iterable
到element
中的每个值赋值。这就是示例函数使用in
的方式(尽管由于您要循环的列表为空,所以循环从不执行任何操作)。
您可以使用in
的另一种方式是作为运算符。像x in y
这样的表达式测试元素x
是否存在于容器y
中。 (还有in
运算符的否定版本not in
。表达式x not in y
等同于not (x in y)
。)我怀疑这是您的递归代码正在做的事情。这对于处理空列表文字也没有用(因为按定义,空列表不包含任何内容),但是我猜测真正的递归函数会更复杂。
作为in
两种用法的示例,这是一个生成器函数,该函数使用一组从其他可迭代项中滤除重复项。它具有一个for
的{{1}}循环,并且还使用in
(从技术上讲in
)作为运算符来测试输入迭代器的下一个值是否为not in
中包含的内容:
seen
答案 1 :(得分:0)
一个递归函数调用自身n次,然后在最后一个递归中返回一个终止值,该值从递归堆栈中退出。
示例: 计算数字的阶乘:
def fact(n):
# ex: 5 * 4 * 3 * 2 * 1
# n == 0 is your terminating recursion
if n == 0:
return 1
# else is your recursion call to fact(n-1)
else:
return n * fact(n-1)
在您的示例中,函数内没有对simple()的递归调用,在空列表[]中也没有任何元素可以逐步执行,因此您的for循环从未执行
答案 2 :(得分:0)
它关注“ for循环”的机制。
表面上,您要遍历的迭代器(在您的示例中为“ []”)的长度为0,因此不会执行循环主体(包括“ print”等)。 / p>
希望有帮助。