日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习必备知识点: 装饰器

發布時間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习必备知识点: 装饰器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、裝飾器定義

裝飾器(Decorators)是 Python 的一個重要部分。簡單地說:他們是修改其他函數的功能的函數。他們有助于讓我們的代碼更簡短。

應用場景:

假如:此時寫了很多函數,有一個新的需求需要在多個函數中添加或者修改一個功能,如果每個函數都修改一次顯得太過繁重,此時裝飾器就出現了。

首先定義一個裝飾器,寫好要修改或者添加的功能,每個函數前用@裝飾器名稱,即可調用裝飾器函數。

定義一個裝飾器:

def outer(func):def inner():print ("start")r = func() # r = Noneprint ("end")return rreturn inner # 注意:返回的只是函數名,不是inner()

定義一個函數,并引用裝飾器:

@outer # 引用裝飾器 def faa():print ("faa")a = faa() print (a)

查看執行結果

start faa end

從執行結果我們可以看出裝飾器的執行順序,先執行裝飾器的部分功能,再執行普通方法中,然后執行裝飾器其它代碼,順序可以根據需求調整。

@作用:

  • 執行outer函數,并將@下面的函數名傳給outer函數,當做參數。
  • 將outer函數的返回值重新賦值給faa faa=outter的返回值
  • 本質上:相當于在原來的函數faa的基礎上,前后增加了一些操作。將原函數封裝到另外一個函數上,并將返回值重新賦值給原函數

二、裝飾器加參數。

裝飾器內部調用函數時,假如函數需要傳參,那么以上代碼無法滿足傳參的需求。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def outer(func):def inner(a1,a2):print ("==== start =====")r = func(a1,a2)print ("==== end ====")return rreturn inner@outer def faa(a1,a2):print ("普通函數中的功能")# ============= 執行結果 ================ ret = faa("a","b") print (ret)

以上代碼即可實現傳參功能。

但是我們會發現這樣傳參很不靈活,既假如還有其它函數需要傳參,而傳參的個數或者參數的類型不一樣,那么以上代碼則無法滿足其它函數傳參。

三、裝飾器傳多個參數

普通函數傳多個參數:

def fun(*args,**kwargs):print (args)print (kwargs)fun("a1","a2",k1="steven",k2="18")# ============= 返回結果 ============== ('a1', 'a2') {'k2': '18', 'k1': 'steven'}

裝飾器傳參

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def outer(func):def inner(*args,**kwargs):print ("=" * 20)print ("裝飾器 start")r = func(*args,**kwargs)print ("裝飾器,end")return rreturn inner@outer def fun1(a1):print ("fun1 一個參數")@outer def fun2(a1,a2):print ("fun2 兩個參數")@outer def fun3(*args,**kwargs):print (args)print (kwargs)ret1 = fun1("f1_a1") ret2 = fun2("f2_a1","f2_a2") ret3 = fun3("f3_a1","f3_a3",k1="k1",k2="k2")#返回結果 ==================== 裝飾器 start fun1 一個參數 裝飾器,end ==================== 裝飾器 start fun2 兩個參數 裝飾器,end ==================== 裝飾器 start ('f3_a1', 'f3_a3') {'k1': 'k1', 'k2': 'k2'} 裝飾器,end

四、添加多個裝飾器

def outer(func):def inner(*args,**kwargs):print ("="*20)print ("裝飾器outer start")r = func(*args,**kwargs)print ("裝飾器outer end")return rreturn innerdef outer_1(func):def inner(*args,**kwargs):print ('='*20)print ("裝飾器outer_1 start")r = func(*args,**kwargs)print ("裝飾器outer_1 end")return rreturn inner@outer @outer_1 def fun1(a1):print ("fun1")f1 = fun1("多個裝飾器")#返回值==================== 裝飾器outer start ==================== 裝飾器outer_1 start fun1 裝飾器outer_1 end 裝飾器outer end

看懂了嗎?不懂關系,小編創建了一個Python學習交流QQ群:531509025,群里有大量基礎入門知識,都是從零開始的,群里還有專業的人給你解答問題。尋找有志同道合的小伙伴,互幫互助,群里還有不錯PDF電子書!

總結

以上是生活随笔為你收集整理的python学习必备知识点: 装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。