#第五步:帶有返回值的裝飾器 把第四步復制過來 #用於擴展基本函數的函數 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)