2 回答
TA贡献1860条经验 获得超8个赞
您可以使用生成器中的返回值来做到这一点,这就是表达式yield from最终返回的值:
def factorial2(n):
if n == 1:
f = 1
else:
a = yield from factorial2(n - 1)
f = n * a
# Yielded by the generator
yield f
# Returned to `yield from`
return f
for a in factorial2(12):
print(a)
# 1
# 2
# 6
# 24
# 120
# 720
# 5040
# 40320
# 362880
# 3628800
# 39916800
# 479001600
TA贡献1848条经验 获得超2个赞
您拥有的代码factorial2相当于:
# wrong code, do not use
def factorial2(n):
if n == 1:
yield 1
else:
for i in factorial2(n - 1):
yield i * n
我希望你能明白为什么这不起作用。
zip
相反,您可以尝试使用和 来从另一方面解决这个问题itertools.count
。
from itertools import count
def factorial3(n):
yield 1
if n > 1:
yield from (u * i for u, i in zip(factorial3(n - 1), count(2)))
添加回答
举报