2 回答

TA貢獻(xiàn)1860條經(jīng)驗 獲得超8個贊
您可以使用生成器中的返回值來做到這一點,這就是表達(dá)式y(tǒng)ield 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貢獻(xiàn)1848條經(jīng)驗 獲得超2個贊
您擁有的代碼factorial2相當(dāng)于:
# 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)))
添加回答
舉報