中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎么應用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

吴川市| 张家口市| 西昌市| 马关县| 荣昌县| 马边| 华坪县| 德阳市| 玉山县| 三门县| 杂多县| 越西县| 丹阳市| 麻江县| 克山县| 合江县| 富宁县| 温宿县| 河津市| 鹤岗市| 庆元县| 鞍山市| 大连市| 铜鼓县| 马鞍山市| 朝阳市| 桐庐县| 濉溪县| 嘉鱼县| 东辽县| 巍山| 施甸县| 潜江市| 宁武县| 长寿区| 河南省| 赤峰市| 营山县| 嘉义市| 株洲县| 迭部县|