91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python裝飾器是什么東西

發布時間:2021-08-18 11:04:12 來源:億速云 閱讀:138 作者:chen 欄目:大數據

本篇內容介紹了“Python裝飾器是什么東西”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

今天說說帶參數的裝飾器,為了簡化業務邏輯,只實現字符串大寫轉換的需求,重點來關注裝飾器部分:

# 業務函數
def my_upper(text):
   value = text.upper()
   return value

print(my_upper("hello"))  # HELLO

現在需求有變更,核心業務不變,但是需要對轉換的的字符包裹一層HTM標簽,輸出如: <p>HELLO</p>,最簡單的辦法就是直接在函數里面修改邏輯,如:

def my_upper(text):
   value = text.upper()
   return "<p>" + value + "</p>"

又接到產品通知,需求有變更,還要在外面套一個div,于是你很不情愿地回去再修改:

def my_upper(text):
   value = text.upper()
   return "<div><p>" + value + "</p></div>"

如何應對產品這種無止境的修改呢?

不過,技術最終還是要為業務服務,那我們就想一個可以靈活應對產品的辦法吧,這里,裝飾器就是一個很好的方案。最終效果應該是這樣:

@tag("p")
def my_upper(text):
   value = text.upper()
   return value

print(my_upper("hello")) #<p>HELLO</p>

如何實現呢?先從簡單裝飾器開始,實現一個不帶參數的裝飾器

def tag(func):
   def wrapper(text):
       value = func(text)
       return "<p>" + value + "</p>"

   return wrapper

@tag
def my_upper(text):
   value = text.upper()
   return value

調用

print(my_upper("hello")) # <p>hello</p>

@tag 語法糖等價于  my_upper = tag(my_upper)

my_upper("hello") 等價于 wrapper("hello") 盡管你不能直接訪問wrapper,但可以這樣去理解

使用裝飾器,業務代碼一行的都沒改,只需要在函數定義處加上裝飾器,就實現了相同的功能,那么如何更靈活地通過參數來指定輸出的樣式呢?使用帶參數的裝飾器

帶參數的裝飾器

帶參數的裝飾器只需要在原來那個不帶參數的裝飾器基礎上之上在最外層套一個函數,該函數中定義一個參數,然后嵌套函數中引用該參數即可實現。從下圖看出,我只是把里面那個函數改了一下名字,其余和原來不帶參數的裝飾器是一樣的。有沒有覺得這樣更靈活?

Python裝飾器是什么東西

當然,裝飾器不僅可以修飾函數,還可以修飾類。

“Python裝飾器是什么東西”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仁寿县| 霞浦县| 秭归县| 本溪市| 涪陵区| 洛隆县| 车致| 七台河市| 鄂托克旗| 鱼台县| 山阳县| 广河县| 石泉县| 普安县| 金湖县| 开封县| 富阳市| 潞城市| 高清| 凤冈县| 汉中市| 和静县| 海盐县| 汪清县| 龙岩市| 成安县| 霍山县| 改则县| 英德市| 澄江县| 谢通门县| 无极县| 华容县| 肥城市| 土默特左旗| 南江县| 惠东县| 铜陵市| 高清| 钟山县| 卓资县|