python傳參和裝飾器

一. 位置參數(shù)與關(guān)鍵字參數(shù)

def say_hi(name,who):
    print("{} say hi to {}".format(name,who))

say_hi("jose","bill")                 #正確
say_hi(who="bill","jose")        #錯(cuò)誤
say_hi(name="jose","bill")      #錯(cuò)誤
say_hi('bill',name="jose")      #正確

結(jié)論很簡(jiǎn)單埂蕊,有位置參數(shù)時(shí)谚中,位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,并且關(guān)鍵字參數(shù)之間不存在先后順序。

二. *args和**kwarg

可變位置參數(shù)和可變關(guān)鍵字參數(shù)是不確定要向函數(shù)傳參與否或者傳幾個(gè)參數(shù)時(shí)使用的:

def func(*args):
    ...
# func()
# func(a)
# func(a, b, c)

按照傳參順序生成元組蔑担,就像把幾個(gè)位置參數(shù)打成包裹。

def func(**kwargs):
    ...
# func(a = 1)
# func(a = 1, b = 2)

按照傳參順序生成一個(gè)字典枷遂。也就是把可變關(guān)鍵字參數(shù)打成包裹漆枚。

def foo(x,*args,a=4,**kwargs):  #使用默認(rèn)參數(shù)時(shí),注意默認(rèn)參數(shù)的位置要在args之后kwargs之前
    print(x)
    print(a)
    print(args)
    print(kwargs)

foo(1,5,6,7,8,y=2,z=3)  #調(diào)用函數(shù)膀曾,不修改默認(rèn)參數(shù)
 1   #x的值
 4   #a的值
(5, 6, 7, 8)   #*args的值
{'y': 2, 'z': 3}    ##kwargs的值

三. 裝飾器

聽(tīng)說(shuō)裝飾器必問(wèn)县爬?畢竟是在python中應(yīng)用特別廣泛的代表,今天好好研究一下添谊。
首先要明確的是财喳,裝飾器本質(zhì)上也是一個(gè)python函數(shù),可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下增加額外功能斩狱。一個(gè)簡(jiǎn)單的例子就是為函數(shù)增加他的名字耳高。

def fun1(para):
    print('abc')
    print(fun1.__name__)

如果不僅僅有fun1,還有fun2,fun3我們統(tǒng)稱fun,我們?yōu)槊總€(gè)函數(shù)都增加一個(gè)顯示名字的方法,你肯定知道一個(gè)個(gè)加是不現(xiàn)實(shí)的喊废,而且也很麻煩祝高。可能你想到了創(chuàng)建一個(gè)新函數(shù)污筷。

def log(fun):
    print(fun.__name__)
    fun()

但是這樣的話其實(shí)也不可避免的改動(dòng)了函數(shù)聲明工闺,比如原來(lái)使用fun1(para)就能完成的任務(wù),現(xiàn)在要使用log(fun1(para))瓣蛀。
那么如果你有很多別的語(yǔ)言的學(xué)習(xí)經(jīng)驗(yàn)陆蟆,可能已經(jīng)注意到了一點(diǎn)不同,那就是python的函數(shù)也可以當(dāng)作普通的對(duì)象傳遞給另一個(gè)函數(shù)惋增,有了這一點(diǎn)前提叠殷,裝飾器就有了一席之地。

def log(func):

    def real():
        print("%s is running" % func.__name__)
        return func()
    return real

@log
def abc():
    print('abc')

#abc = log(abc) 
abc()

可以看到诈皿,裝飾器與bar = log(bar)的作用實(shí)際上是一樣的林束。

除了函數(shù)裝飾器之外還有類裝飾器像棘,原理是一樣的,只不過(guò)類裝飾器中需要有一個(gè)“call”方法:

class log(object):
    def __init__(self, func):
        self._func = func

    def __call__(self):
        print ('abc')
        self._func()

# @Foo
def abc():
    print ('abc')
abc = log(abc)
abc()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壶冒,一起剝皮案震驚了整個(gè)濱河市缕题,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胖腾,老刑警劉巖烟零,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異咸作,居然都是意外死亡锨阿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)记罚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)墅诡,“玉大人,你說(shuō)我怎么就攤上這事毫胜∈樾保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵酵使,是天一觀的道長(zhǎng)荐吉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)口渔,這世上最難降的妖魔是什么样屠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮缺脉,結(jié)果婚禮上痪欲,老公的妹妹穿的比我還像新娘。我一直安慰自己攻礼,他們只是感情好业踢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著礁扮,像睡著了一般知举。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上太伊,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天雇锡,我揣著相機(jī)與錄音,去河邊找鬼僚焦。 笑死锰提,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播立肘,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼边坤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谅年?” 一聲冷哼從身側(cè)響起惩嘉,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踢故,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體惹苗,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殿较,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桩蓉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淋纲。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖院究,靈堂內(nèi)的尸體忽然破棺而出洽瞬,到底是詐尸還是另有隱情,我是刑警寧澤业汰,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布伙窃,位于F島的核電站,受9級(jí)特大地震影響样漆,放射性物質(zhì)發(fā)生泄漏为障。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一放祟、第九天 我趴在偏房一處隱蔽的房頂上張望鳍怨。 院中可真熱鬧,春花似錦跪妥、人聲如沸鞋喇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侦香。三九已至,卻和暖如春执桌,著一層夾襖步出監(jiān)牢的瞬間鄙皇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工仰挣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伴逸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓膘壶,卻偏偏與公主長(zhǎng)得像错蝴,于是被迫代替她去往敵國(guó)和親洲愤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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