[英]Question about using return value in python
def multiples(n, i=1):
if i != 11:
multiples(n,i+1)
return n*i
print(multiples(2))
output:
2
这是一个简单的例子,
我想要打印所有倍数(2 到 22),这样我就可以在另一个 function 中使用它。
有人可以向我解释为什么它只打印 2 吗?
我不确定它将如何通过递归实现,或者为什么在您的代码中需要递归,但如果您只想获得倍数,那么这将起作用:
def multiples(n, i=1):
while i != 12:
print(n*i)
i += 1
multiples(2)
我建议你学习递归的基础知识,function 调用等。
我们先来看看你的function从1到11做了什么。
对于multiples(2)
,function的参数是n=2,i=1,发现i不等于11,满足条件,所以function调用multiples(2, 2)
接下来是multiples(2, 2)
,值 i=2 仍然不等于 11,所以 function 调用multiples(2, 3)
,依此类推,直到 i = 11。
当调用multiples(2, 11)
时。 条件不满足。 所以 function 立即返回 2 * 11 = 22,并且 go 返回multiples(2, 10)
但是在multiples(2, 11)
之后,返回值被丢弃并且 function multiples(2, 10)
返回 20
所以经过所有的递归,function multiples(2)
只会返回2,不会得到multiples(2, 2)
的返回值
如果要打印递归的所有值。 我建议你可以使用下面的方法:
def multiples(n, i=1):
if i >= 11: # it is suggested to use greater then to prevent decimal numbers error
return [n*i]+ multiples(n,i+1) # add current value and next recursive value
else:
return [n*i] # if i is greater then 11, return value and stop recursive
print(multiples(2))
output:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
您的代码没有使用递归调用的返回值,因此它仅返回第一级return n*i
返回的值。
由于您希望生成一个数字序列,因此最好让您的 function 成为生成器,而不是通过产生n
和当前i
的乘积,然后从递归调用中产生序列,直到i
达到所需的最大值m
:
def multiples(n, i=1, m=11):
yield n * i
if i < m:
yield from multiples(n, i + 1, m)
for i in multiples(2):
print(i)
这输出:
2
4
6
8
10
12
14
16
18
20
22
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.