2 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以使用生成器中的返回值來(lái)做到這一點(diǎn),這就是表達(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)驗(yàn) 獲得超2個(gè)贊
您擁有的代碼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
相反,您可以嘗試使用和 來(lái)從另一方面解決這個(gè)問(wèn)題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)))
添加回答
舉報(bào)