python 裝飾器 第五步(2):帶有返回值得裝飾器


#第五步:帶有返回值的裝飾器  把第四步復制過來
#用於擴展基本函數的函數
def kuozhan(func):
    #內部函數(擴展之后的eat函數)
    def neweat():
        #以下三步就是擴展之后的功能,於是我們把這三個哥們做成一個函數
        #取名叫做neweat
        #擴展功能1
        print('飯前要洗手')
        #調用基本函數
        result1 = func()
        #擴展功能2
        print('飯后溜一圈')

        #未來的eat函數沒有返回值,所以在最后調用的時候返回值為None
        #為neweat添加返回值
        return result1

    #這里需要有返回值才能傳給eat
    #添加返回值
    #return 12  eat原來是函數,eat擴展之后還以函數的形式賦值給eat
    #所以return后面必須是擴展之后的函數
    #5裝飾器用於返回未來的eat函數的return
    #5而不是neweat(eat)自帶的返回值
    #5應該在neweat函數里面再加一個return
    return neweat
#基本函數
@kuozhan#eat = kuozhan(eat) #eat就相當於以前的result,用來接收返回值
def eat():
    print('吃飯')
    return '睡覺'
#擴展之后的函數要重新賦值給基本函數!(但是此步驟還實現不了)
#eat = kuozhan(eat) #eat就相當於以前的result,用來接收返回值
#print(eat)#第四步的目的是為了讓打印eat函數的時候打印一個函數
#而不是像第二步和第三步打印回來的是None
#調用函數
result = eat()#eat就是擴展的內部函數neweat函數,就是return返回的值
print('原函數的返回值為',result)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM