成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

小李飛刀:python請(qǐng)與我一起愉快的玩耍吧!

FuisonDesign / 709人閱讀

摘要:屬性,可以函數(shù)的名字在代碼運(yùn)行期間動(dòng)態(tài)增加功能的方式,稱之為裝飾器。本質(zhì)上,就是一個(gè)返回函數(shù)的高階函數(shù)。比如,定義一個(gè)能打印日志的。接受函數(shù)作為參數(shù),要放置在函數(shù)定義處。一個(gè)完整的的代碼如下記錄的是傳入的的值,位置在嵌套內(nèi)或者帶參數(shù)的如下。

又是一段叨叨

如果總是擔(dān)心能不能做到的話,那就干脆不要做了。
想做的事情還是一往無(wú)前的好,什么都不想,就努力沖沖沖吧!

裝飾器

因?yàn)楹瘮?shù)是一個(gè)對(duì)象。
所以。

__name__屬性,可以get函數(shù)的名字.

在代碼運(yùn)行期間動(dòng)態(tài)增加功能的方式,稱之為“裝飾器”(Decorator)。

本質(zhì)上,decorator就是一個(gè)返回函數(shù)的高階函數(shù)。

比如,定義一個(gè)能打印日志的decorator。

def log(func):
    def wrapper(*args, **kw):
        print("call %s():" % func.__name__)
        return func(*args, **kw)
    return wrapper

log接受函數(shù)作為參數(shù),要放置在函數(shù)定義處。

@log
def now():
    print("2015-3-25")

這樣調(diào)用now()的時(shí)候,就會(huì)先打印出程序名稱。
@log放到now()函數(shù)的定義處,相當(dāng)于執(zhí)行了語(yǔ)句

now = log(now)

由于log()是一個(gè)decorator,返回一個(gè)函數(shù),所以,原來(lái)的now()函數(shù)仍然存在,只是現(xiàn)在同名的now變量指向了新的函數(shù),于是調(diào)用now()將執(zhí)行新函數(shù),即在log()函數(shù)中返回的wrapper()函數(shù)?!敬藭r(shí)的now已經(jīng)不是原來(lái)的now了,只是個(gè)同名的朋友】

當(dāng)需要再進(jìn)一步的時(shí)候,比如decorator本身需要傳入?yún)?shù),就需要再改造下函數(shù)。

這個(gè)三層嵌套的效果如下:

now = log("execute")(now)

但是也存在問(wèn)題,因?yàn)楹瘮?shù)的名字now.__name__此時(shí)已經(jīng)變成了wrapper,所以需要把原始函數(shù)的名稱等屬性復(fù)制到wrapper()中,否則一些依賴于函數(shù)簽名的代碼執(zhí)行就會(huì)出錯(cuò)。

Python內(nèi)置的functools.wraps就可以用來(lái)處理這個(gè)問(wèn)題。
一個(gè)完整的decorator的代碼如下:

import functools

def log(func):
    @functools.wraps(func)  #記錄的是傳入的func的值,位置在嵌套內(nèi)
    def wrapper(*args, **kw):
        print("call %s():" % func.__name__)
        return func(*args, **kw)
    return wrapper

或者帶參數(shù)的如下。

import functools

def log(text):
    def decorator(func):
        @functools.wraps(func) #記錄的是傳入的func的值,位置在嵌套內(nèi)
        def wrapper(*args, **kw):
            print("%s %s():" % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

@functools.wraps(func)加上這句很重要。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42900.html

相關(guān)文章

  • 小李飛刀python我來(lái)做題啦

    摘要:好久不見(jiàn)最近都在忙年底的年會(huì),還沉迷于學(xué)習(xí)統(tǒng)計(jì)學(xué),教程還停留在基礎(chǔ)語(yǔ)法。做題做題無(wú)論如何,數(shù)據(jù)結(jié)構(gòu)還是很重要的,所以準(zhǔn)備每天刷的題目啦。第一題移除元素給定一個(gè)數(shù)組和一個(gè)值,你需要原地移除所有數(shù)值等于的元素,返回移除后數(shù)組的新長(zhǎng)度。 好久不見(jiàn) 最近都在忙年底的年會(huì),還沉迷于學(xué)習(xí)統(tǒng)計(jì)學(xué),python教程還停留在基礎(chǔ)語(yǔ)法。但是仔細(xì)規(guī)劃了下,還是要好好的瞄準(zhǔn)目標(biāo)前行。所以準(zhǔn)備呢,實(shí)戰(zhàn)走起來(lái)。 ...

    nevermind 評(píng)論0 收藏0
  • 小李飛刀:磨刀霍霍繼續(xù)向python

    摘要:例如做累加,函數(shù)生成整數(shù)序列,函數(shù)轉(zhuǎn)換成。因?yàn)椴荒苤貜?fù),所以中沒(méi)有重復(fù)的。創(chuàng)建,需要提供一個(gè)作為輸入合集。重復(fù)元素在中自動(dòng)被過(guò)濾。添加元素,重復(fù)添加無(wú)效果刪除元素 寫(xiě)在前面的一點(diǎn)羅里吧嗦小嘮叨昨晚的python看到了快12點(diǎn)吧,然后進(jìn)度相對(duì)來(lái)說(shuō)還算滿意,只能說(shuō)一點(diǎn)點(diǎn)推進(jìn),慶幸自己的大學(xué)還是一個(gè)比較認(rèn)真的小碼農(nóng),現(xiàn)在撿起來(lái)還算比較得心應(yīng)手(pia飛自己,算法什么的還沒(méi)到好嗎?。┖煤脤W(xué)習(xí)唄...

    txgcwm 評(píng)論0 收藏0
  • 小李飛刀:ppppppython是需要好好學(xué)習(xí)

    摘要:直接抄其中一份的結(jié)論吧各地區(qū)招聘公司數(shù)量和平均待遇??梢钥闯霾徽撌钦衅腹镜臄?shù)據(jù)還是平均待遇水平主要都是北上廣深杭州占優(yōu)勢(shì)。但事實(shí)證明,總是要有一些代價(jià)的。要學(xué)會(huì)看報(bào)錯(cuò)信息。函數(shù)定義結(jié)束后需要按兩次回車(chē)重新回到提示符下。 又是寫(xiě)在前面的亂七八糟 持續(xù)學(xué)習(xí)的第三天了,持續(xù)學(xué)習(xí)是一個(gè)不容易培養(yǎng)的好習(xí)慣,但是堅(jiān)持就是勝利嘛~昨天因?yàn)橐稽c(diǎn)點(diǎn)事情,所以沒(méi)能學(xué)習(xí)很長(zhǎng)時(shí)間,今天要補(bǔ)回來(lái)。周末要搬家,...

    Simon 評(píng)論0 收藏0
  • 小李飛刀python你慢點(diǎn)飛,我腦子還在后面追

    摘要:默認(rèn)參數(shù)設(shè)置默認(rèn)參數(shù)時(shí),有幾點(diǎn)要注意一是必選參數(shù)在前,默認(rèn)參數(shù)在后,否則的解釋器會(huì)報(bào)錯(cuò)二是如何設(shè)置默認(rèn)參數(shù)。注意此處,獲得的其實(shí)是的拷貝,函數(shù)內(nèi)對(duì)的改變不會(huì)影響到。使用遞歸函數(shù)需要注意防止棧溢出。 總是在最前面的叨逼叨 最近總是在想成長(zhǎng)這兩個(gè)很常常被提起的事情,這對(duì)于一個(gè)已經(jīng)25歲的半中年而言,已經(jīng)是一個(gè)不太能高頻提起的詞。但是,最近一些事情吧,總讓我覺(jué)得我的生長(zhǎng)期似乎比正常人來(lái)的晚了...

    kevin 評(píng)論0 收藏0
  • 小李飛刀python請(qǐng)你輕輕輕點(diǎn)虐

    摘要:迭代器可以直接作用于循環(huán)的對(duì)象統(tǒng)稱為可迭代對(duì)象??梢员缓瘮?shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象稱為迭代器。這個(gè)高階函數(shù),關(guān)鍵在于正確實(shí)現(xiàn)一個(gè)篩選函數(shù)。 又是日常嘮嗑的一小段 真的是非常話嘮的在下,日常給自己打點(diǎn)雞血吧。昨晚和老媽聊了一整晚,所以昨天并沒(méi)有更新。然后因?yàn)楹芸煲_(kāi)始算個(gè)稅減免的部分,對(duì)于溫飽線的在下而言,其實(shí)減免的可能就只是奶茶錢(qián)吧。工作的本質(zhì)是賺錢(qián),我也很想在30歲之前完成財(cái)務(wù)自...

    Keagan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<