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

溫馨提示×

溫馨提示×

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

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

怎么應用python裝飾器

發布時間:2021-11-09 11:12:36 來源:億速云 閱讀:288 作者:iii 欄目:開發技術

本篇內容主要講解“怎么應用python裝飾器”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么應用python裝飾器”吧!

什么是裝飾器

從字面意思上來看,裝飾器是用來裝飾其他東西的工具。在python中裝飾器分為函數裝飾器和類裝飾器。
簡而言之,函數裝飾器是用來裝飾函數的裝飾器,其主要目的是增加目標函數的功能,類裝飾器也就是裝飾類的裝飾器,增加類的功能。

函數裝飾器

裝飾器本質是嵌套函數
下面是一個簡單的裝飾器

# fun1為裝飾器名稱,function指的是被裝飾的函數
def fun1(function):
	def fun2():
		print("開始了!")
		function() # 執行被裝飾的函數或者 或者 return function()
	return fun2

外面的fun1()需要傳入一個參數,這個參數是用來傳入要被裝飾的函數,里面的fun2()需要執行function這個參數。
這是將函數當成參數傳入另一個函數。

使用方法:
在需要裝飾的函數上添加@裝飾器名稱

@fun1
def fun3():
	print("aaa")

fun3()

可以等價成這樣:

def fun3():
	print("aaa")
fun = fun1(fun3)
fun()

輸出結果是一致的

執行結果:

開始了!
aaa

如果傳入的函數需要參數可以這樣寫:

def fun1(function):
	def fun2(a):
		print("開始了!")
		function(a) 
	return fun2

@fun1
def fun3(a):
	print(a)
fun3("aaa")

輸出結果:

開始了!
aaa

如果不清楚傳入的函數需要多少個參數,可以這樣寫:

def fun1(function):
	def fun2(*args, **kwargs):
		print("開始了!")
		function(*args, **kwargs) 
	return fun2

@fun1
def fun3(a,b):
	print(a,b)

@fun1	
def fun4(a,b,c):
    print(a,b,c)
    
fun3("aaa","bbb")
fun4("ccc","ddd","eee")

運行結果:

開始了!
aaa bbb
開始了!
ccc ddd eee

如果函數裝飾器需要添加參數,可以這樣寫:

def fun(msg):
	def fun1(function):
		def fun2(*args, **kwargs):
			print("開始了!{}".format(msg))
			function(*args, **kwargs) 
		return fun2
	return fun1

@fun(msg="小朋友")
def fun3(a,b):
	print(a,b)

fun3("aaa","bbb")

運行結果:

開始了!小朋友
aaa bbb

類裝飾器

類裝飾器的用法基本和函數裝飾器一樣,只不過是用類寫的裝飾器

class fun1(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print(("開始了!")
        self.func(*args, **kwargs)

@fun1
def fun2(a,b):
	print(a,b)

fun2("aaa","bbb")

類裝飾用到了類的__call__方法

運行結果:

開始了!
aaa bbb

還可以這樣寫:

class fun(object):
    def __init__(self, msg):
        self.msg = msg
        

    def __call__(self, func):
        def fun1(*args, **kwargs):
            print("開始了!{0}".format(self.msg))
            func(*args, **kwargs)
        return fun1

@fun(msg="小朋友")
def fun2(a, b):
    print(a, b)

fun2("aaa,","bbb")

運行結果:

開始了!小朋友
aaa, bbb

到此,相信大家對“怎么應用python裝飾器”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

武山县| 金昌市| 榆社县| 宁乡县| 安溪县| 通州区| 贵定县| 洪泽县| 武功县| 乌拉特中旗| 黄大仙区| 成武县| 玉门市| 沈丘县| 久治县| 滨州市| 长沙县| 芦山县| 垫江县| 平江县| 江北区| 剑河县| 天门市| 余江县| 昔阳县| 广河县| 墨脱县| 阳新县| 运城市| 湛江市| 临江市| 大荔县| 伊川县| 富蕴县| 汕头市| 甘德县| 额济纳旗| 漾濞| 利辛县| 郧西县| 旬阳县|