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

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

使用閉包來記住以前的函數(shù)調(diào)用

使用閉包來記住以前的函數(shù)調(diào)用

暮色呼如 2023-07-05 15:40:00
我已經(jīng)開始了一個新項目,我想創(chuàng)建一個函數(shù),我們將其命名為foo,它會記住之前對其進行的調(diào)用。因此,如果函數(shù)應該返回最后使用的參數(shù),我們應該這樣:print(foo(2), foo(7), foo('a'))打印出:None 2 7問題我們?nèi)绾蝿?chuàng)建一個裝飾器函數(shù),例如調(diào)用bar它打印給定的參數(shù),除非前一個函數(shù)調(diào)用與前一個相同,在這種情況下,該函數(shù)不打印任何內(nèi)容,只是返回 None 。我設法做了什么?到目前為止,我已經(jīng)能夠創(chuàng)建該函數(shù)的框架,如下所示:@bardef printer(*args):    print(*args)在 bar 函數(shù)中,我應該以某種方式檢查之前的調(diào)用,但我不知道如何!我不想使用全局變量或其他東西,而只想使用函數(shù)。bar我假設我需要對and函數(shù)使用閉包foo。你能告訴我如何實施它們嗎?注意 ,這些調(diào)用應該發(fā)生以下情況:printer("a")  # prints aprinter("a")  # only returns None printer("a")  # only returns Noneprinter("b")  # prints bprinter("a")  # prints a
查看完整描述

1 回答

?
有只小跳蛙

TA貢獻1824條經(jīng)驗 獲得超8個贊

foo首先編寫一個您希望裝飾器生成的版本,例如


def foo(arg, prev=[]):

    if arg in prev[-1:]:

        return None

    else:

        prev.append(arg)

        return arg


>>> print(foo(1), foo(2), foo(2), foo(3))

1 2 None 3

現(xiàn)在您知道您希望裝飾器做什么。


def bar(f):

    def bar(arg, prev=[]):

        if arg in prev[-1:]:

            return None

        else:

            prev.append(arg)

            return(f(arg))

    return bar

現(xiàn)在重新定義foo沒有內(nèi)存,但包裹在裝飾器中:


@bar

def foo(arg):

    return arg


>>> print(foo(1), foo(2), foo(2), foo(3))

1 2 None 3



查看完整回答
反對 回復 2023-07-05
  • 1 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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