bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Python的裝飾器是用來干嘛的-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為興和企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站制作興和網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

不懂Python的裝飾器是用來干嘛的?其實(shí)想解決這個(gè)問題也不難,下面讓小編帶著大家一起學(xué)習(xí)怎么去解決,希望大家閱讀完這篇文章后大所收獲。

Python的裝飾器,是一個(gè)Python中一個(gè)比較難以理解的知識(shí)點(diǎn), 今天我試試說一說,說的如果不好,請見諒。

裝飾器,從字面意思來說,就是修飾一個(gè)事物的,在Python里面的作用就是讓一個(gè)已經(jīng)存在的函數(shù)擁有一個(gè)以前沒有的功能。裝飾器本質(zhì)上還是一個(gè)函數(shù),只是它的功能是為其他函數(shù)添加新功能。

那有人會(huì)說,我在原來的函數(shù)里面加一些代碼,也可以實(shí)現(xiàn)啊,為什么還要搞個(gè)裝飾器來增加功能呢? 當(dāng)然,如果你給一個(gè)函數(shù)加個(gè)功能,是可以加代碼, 但是如果是讓你給100個(gè)函數(shù)代碼塊加一個(gè)相同的功能呢? 一個(gè)個(gè)改代碼嗎? 你會(huì)奔潰的。

下面說說一個(gè)裝飾器要實(shí)現(xiàn),要符合一定的規(guī)則,就是兩個(gè)不改動(dòng) 1.不改動(dòng)被裝飾函數(shù)的源代碼 2.不改動(dòng)被修飾函數(shù)的調(diào)用方式

就是你加沒加這個(gè)裝飾器,函數(shù)要按照原樣來調(diào)用

下面說說裝飾器到底怎么寫,怎么用,上面說到裝飾器也是一個(gè)函數(shù),但是這個(gè)函數(shù)和普通的函數(shù)不太一樣,他是一個(gè)高階函數(shù),那我們給裝飾器大概下個(gè)定義

裝飾器:一個(gè)可以給別的函數(shù)添加新功能的高階函數(shù)(當(dāng)然現(xiàn)在還是不完整的定義)

下面介紹下什么是高階函數(shù)。

高階函數(shù): 一個(gè)可以接受函數(shù)為參數(shù)或者能reture 一個(gè)函數(shù)的函數(shù)就是高階函數(shù)

是不是有點(diǎn)繞,舉個(gè)例子

def f1():  
    print('普通函數(shù)')

def f2(func):  #f2函數(shù)的參數(shù)是一個(gè)函數(shù),所以它是一個(gè)高階函數(shù)
    print('高階函數(shù)1')
    f1()

def f3(func): #f3函數(shù)的返回值是一個(gè)函數(shù),所以它是一個(gè)高階函數(shù)
    print('高階函數(shù)2')
    return func

f2(f1)
f3(f1)

結(jié)果:
高階函數(shù)1
普通函數(shù)
高階函數(shù)2

有點(diǎn)基礎(chǔ)的人可能知道,這個(gè)根本就不是裝飾器,騙人的。當(dāng)然裝飾器不是這么簡單。

那下面要介紹的一個(gè)東西叫嵌套函數(shù),那什么叫嵌套函數(shù)呢? 字面意思應(yīng)該就知道了,函數(shù)里面套一個(gè)子函數(shù)

舉個(gè)例子:

def outer():
    print('outer')
    def inner():
        print('inner')
    inner()
outer()

結(jié)果
outer
inner

下面我們要給裝飾器重新下個(gè)定義了。

裝飾器:一個(gè)可以給別的函數(shù)添加新功能的高階函數(shù)+嵌套函數(shù)

那么我們把高階函數(shù)+嵌套函數(shù)結(jié)合在一起看看

一個(gè)可以添加一行日志的裝飾器

def add_log(func):  #一個(gè)函數(shù)作為參數(shù),這個(gè)函數(shù)就是我們要
    def wrapper():
        print('我們要加一些日志') #要給原函數(shù)添加的新功能,這里就是打印一行日志,當(dāng)然可以實(shí)現(xiàn)其他復(fù)雜的功能
        func()
    return wrapper

#上面可以看到高階函數(shù)+嵌套函數(shù)的影子吧,加一起就是一個(gè)最簡單的裝飾器拉

@add_log  #裝飾器的用法
def f1():
    print('普通函數(shù)')

f1()  #調(diào)用函數(shù)

結(jié)果:
#看結(jié)果f1里面只有print一行,但是結(jié)果多了一行,就是裝飾器的作用
我們要加一些日志
普通函數(shù)

這些裝飾器大概知道上面意思了吧。

下面說說,上面的裝飾器,有沒有沒有上面問題呢?

看看,仔細(xì)看看。 看出來了嗎? 看不出來,我說了哦。

上面我們的f1()函數(shù), 沒有參數(shù),是不是,想想如果f1()函數(shù)要加參數(shù)怎么辦啊?

def add_log(func):
    def wrapper(name):
        print('我們要加一些日志')
        func(name)
    return wrapper

@add_log
def f1(name):
    print('普通函數(shù) %s' %name)

f1('python')

有人是不是想這樣實(shí)現(xiàn)呢?

當(dāng)然這樣是可以的,但是我們不要忘了裝飾器的作用,他不是給某一個(gè)固定的函數(shù)來使用的,假如現(xiàn)在還需要修飾一個(gè)f2(name,age), 那怎么辦啊? 沒辦法,裝飾器的代碼都給你定死了,所以上面這樣寫是不行的。

到底怎么寫呢?

def add_log(func):
    def wrapper(*args,**kwargs):
        print('我們要加一些日志')
        func(*args,**kwargs)
    return wrapper

@add_log
def f1(name):
    print('普通函數(shù) %s' %name)

@add_log
def f2(name,age):
    print('我是%s,我%s歲了' %(name,age))

f1('python')
f2('java',10)

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python的裝飾器是用來干嘛的內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!

當(dāng)前名稱:Python的裝飾器是用來干嘛的-創(chuàng)新互聯(lián)
分享地址:http://vcdvsql.cn/article36/cecdpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃定制網(wǎng)站網(wǎng)站建設(shè)虛擬主機(jī)營銷型網(wǎng)站建設(shè)微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)