Python 裝飾器

在學(xué)習(xí)裝飾器之前躲撰,先看一下 Python 的一些特性门粪。

1.函數(shù)名可作為參數(shù)傳入

先定義一個(gè)函數(shù)赴背,用來(lái)打印自己的函數(shù)名铣焊,再定義一個(gè)函數(shù)來(lái)通過(guò)把之前函數(shù)的函數(shù)名作為參數(shù)傳進(jìn)去逊朽,來(lái)調(diào)用之前的函數(shù),如下曲伊,

def foo():
    print('foo')

def bar(func):
    func()

>>> bar(foo)
foo

從輸出結(jié)果可以看到叽讳, bar 函數(shù)中調(diào)用了 foo 的函數(shù)實(shí)現(xiàn),即函數(shù)名可作為參數(shù)傳入實(shí)現(xiàn)傳入函數(shù)的功能熊昌。

2.裝飾器實(shí)現(xiàn)
def foo():
    print('foo')

def bar(func):
 
    func()

>>> bar(foo)
foo
# -*- coding:utf-8 -*-

"""實(shí)現(xiàn)使用一個(gè)函數(shù)來(lái)調(diào)用另一個(gè)函數(shù)"""


def foo0():
    print('foo')


def bar0(func):
    func()

bar0(foo0) # foo

"""這樣就可以再另外的函數(shù)里面做一些事"""

def foo1():
    print('i am foo')


def bar1(func):
    print('hello, '+func.__name__)
    func()


bar1(foo1)  # hello, foo i am foo
"""實(shí)際上這里得到的是一個(gè)bar函數(shù)绽榛,而不是原先的 func 函數(shù)了"""
"""所以我們要使用裝飾器"""


def foo2():
    print('i am foo')


def bar2(func):
    def wrapper():
        print('hello, ' + func.__name__)
        return func()
    return wrapper


foo2 = bar2(foo2) # 這里可以使用語(yǔ)法糖來(lái)實(shí)現(xiàn)湿酸, @bar就行了
foo2()


"""函數(shù)有參數(shù)"""
from functools import wraps

def bar3(func):
    @wraps(func)
    def wrapper(name):
        print('hello, %s' % name)
        return func(name)
    return wrapper


@bar3
def foo3(name):
    print('i am %s' % name)


foo3('xiaoming')



"""帶參數(shù)的裝飾器"""
def bar4(param):
    def decorate(func):
        def wrapper(name):
            if param == 1:
                print('hello, %s' % name)
            return func(name)
        return wrapper
    return decorate


@bar4(param=1)
def foo4(name):
    print('i am %s' % name)

foo4('xiaohong1')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末婿屹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子推溃,更是在濱河造成了極大的恐慌昂利,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铁坎,死亡現(xiàn)場(chǎng)離奇詭異蜂奸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)硬萍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門扩所,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人朴乖,你說(shuō)我怎么就攤上這事祖屏。” “怎么了买羞?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵袁勺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我畜普,道長(zhǎng)期丰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮钝荡,結(jié)果婚禮上街立,老公的妹妹穿的比我還像新娘。我一直安慰自己化撕,他們只是感情好几晤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著植阴,像睡著了一般蟹瘾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掠手,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天憾朴,我揣著相機(jī)與錄音,去河邊找鬼喷鸽。 笑死众雷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的做祝。 我是一名探鬼主播砾省,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼混槐!你這毒婦竟也來(lái)了编兄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤声登,失蹤者是張志新(化名)和其女友劉穎狠鸳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯嗓,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡件舵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脯厨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铅祸。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖合武,靈堂內(nèi)的尸體忽然破棺而出临梗,到底是詐尸還是另有隱情,我是刑警寧澤眯杏,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布夜焦,位于F島的核電站,受9級(jí)特大地震影響岂贩,放射性物質(zhì)發(fā)生泄漏茫经。R本人自食惡果不足惜巷波,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卸伞。 院中可真熱鬧抹镊,春花似錦、人聲如沸荤傲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)遂黍。三九已至终佛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雾家,已是汗流浹背铃彰。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芯咧,地道東北人牙捉。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像敬飒,于是被迫代替她去往敵國(guó)和親邪铲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 呵呵无拗!作為一名教python的老師带到,我發(fā)現(xiàn)學(xué)生們基本上一開始很難搞定python的裝飾器,也許因?yàn)檠b飾器確實(shí)很難懂...
    TypingQuietly閱讀 19,518評(píng)論 26 186
  • 原文出處: dzone 譯文出處:Wu Cheng(@nullRef) 1. 函數(shù) 在python中蓝纲,函數(shù)通過(guò)...
    DraculaWong閱讀 506評(píng)論 0 3
  • 每個(gè)人都有的內(nèi)褲主要功能是用來(lái)遮羞阴孟,但是到了冬天它沒法為我們防風(fēng)御寒晌纫,咋辦税迷?我們想到的一個(gè)辦法就是把內(nèi)褲改造一下,...
    chen_000閱讀 1,360評(píng)論 0 3
  • 裝飾器的主要作用:代碼復(fù)用锹漱、裝飾函數(shù)! 簡(jiǎn)單裝飾器 現(xiàn)在有三個(gè)函數(shù) 每個(gè)函數(shù)都有自己的功能! 這時(shí)我想讓這些函數(shù)在...
    學(xué)編程的Dreamer閱讀 677評(píng)論 0 8
  • 明高濂的養(yǎng)生經(jīng)典《遵生八箋》中寫道:"人飲真茶,能止渴消食嗅辣,除痰少睡撼泛,利水道,明目益思澡谭,除煩去膩愿题,人固不可一日無(wú)茶...
    靜水時(shí)波閱讀 251評(píng)論 0 0