第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用yield from重構(gòu)階乘實現(xiàn),產(chǎn)生了意想不到的結(jié)果

使用yield from重構(gòu)階乘實現(xiàn),產(chǎn)生了意想不到的結(jié)果

倚天杖 2023-06-27 14:05:52
下面的第一個函數(shù)使用該語句實現(xiàn)階乘函數(shù)的遞歸版本yield。我試圖將這yield from句話應(yīng)用于此factorial(),以便進(jìn)行實驗和學(xué)習(xí)。因此,我編寫了該factorial2()函數(shù),盡管打印了正確的階乘,但它沒有打印所有以前的值,例如factorial().factorial()我想知道是否有任何方法可以獲得與中完全相同的功能factorial2()?def factorial(n):    if n == 1:        yield 1    else:        for u in factorial(n - 1):            yield u        yield u * ndef factorial2(n):    if n == 1:        yield 1    else:        yield from (i * n for i in factorial2(n - 1))def main():    for u in factorial(12):        print(u)    for a in factorial2(12):        print(a)if __name__ == '__main__': main()輸出:12624120720504040320362880362880039916800479001600479001600預(yù)期輸出:(與 相同factorial())1262412072050404032036288036288003991680047900160012624120720504040320362880362880039916800479001600
查看完整描述

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


查看完整回答
反對 回復(fù) 2023-06-27
?
慕尼黑5688855

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)))


查看完整回答
反對 回復(fù) 2023-06-27
  • 2 回答
  • 0 關(guān)注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號