最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 裝飾器詳解與應(yīng)用范例

 更新時(shí)間:2021年11月09日 09:50:21   作者:不俠居  
裝飾器是 Python 的一個(gè)重要部分。簡單地說:他們是修改其他函數(shù)的功能的函數(shù)。他們有助于讓我們的代碼更簡短,也更Pythonic。大多數(shù)初學(xué)者不知道在哪兒使用它們,所以我將要分享下,哪些區(qū)域里裝飾器可以讓你的代碼更簡潔。 首先,讓我們討論下如何寫你自己的裝飾器

什么是裝飾器

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

函數(shù)裝飾器

裝飾器本質(zhì)是嵌套函數(shù)
下面是一個(gè)簡單的裝飾器

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

外面的fun1()需要傳入一個(gè)參數(shù),這個(gè)參數(shù)是用來傳入要被裝飾的函數(shù),里面的fun2()需要執(zhí)行function這個(gè)參數(shù)。
這是將函數(shù)當(dāng)成參數(shù)傳入另一個(gè)函數(shù)。

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

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

fun3()

可以等價(jià)成這樣:

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

輸出結(jié)果是一致的

執(zhí)行結(jié)果:

開始了!
aaa

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

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

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

輸出結(jié)果:

開始了!
aaa

如果不清楚傳入的函數(shù)需要多少個(gè)參數(shù),可以這樣寫:

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")

運(yùn)行結(jié)果:

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

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

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")

運(yùn)行結(jié)果:

開始了!小朋友
aaa bbb

類裝飾器

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

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__方法

運(yùn)行結(jié)果:

開始了!
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")

運(yùn)行結(jié)果:

開始了!小朋友
aaa, bbb

到此這篇關(guān)于python 裝飾器詳解與應(yīng)用范例的文章就介紹到這了,更多相關(guān)python 裝飾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pyqt5設(shè)置返回鍵和跳轉(zhuǎn)頁面鍵的示例代碼

    Pyqt5設(shè)置返回鍵和跳轉(zhuǎn)頁面鍵的示例代碼

    這篇文章主要介紹了Pyqt5設(shè)置返回鍵和跳轉(zhuǎn)頁面鍵的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 一文帶你掌握Python中enumerate函數(shù)和for循環(huán)的對(duì)比

    一文帶你掌握Python中enumerate函數(shù)和for循環(huán)的對(duì)比

    在Python編程中,循環(huán)是一項(xiàng)常見的任務(wù),而for循環(huán)是最常見的一種,然而,Python提供了enumerate函數(shù),它允許在迭代過程中訪問元素的同時(shí)獲得它們的索引,下面我們就來學(xué)習(xí)一下二者的區(qū)別吧
    2023-11-11
  • 使用python3.5仿微軟記事本notepad

    使用python3.5仿微軟記事本notepad

    這篇文章主要為大家詳細(xì)介紹了使用python3.5仿微軟記事本notepad的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • python學(xué)生信息管理系統(tǒng)(完整版)

    python學(xué)生信息管理系統(tǒng)(完整版)

    這篇文章主要為大家詳細(xì)介紹了python學(xué)生信息管理系統(tǒng)的完整版本代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 在Python的while循環(huán)中使用else以及循環(huán)嵌套的用法

    在Python的while循環(huán)中使用else以及循環(huán)嵌套的用法

    這篇文章主要介紹了在Python的while循環(huán)中使用else以及循環(huán)嵌套的用法,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • python orm 框架中sqlalchemy用法實(shí)例詳解

    python orm 框架中sqlalchemy用法實(shí)例詳解

    這篇文章主要介紹了python orm 框架中sqlalchemy用法,結(jié)合實(shí)例形式詳細(xì)分析了Python orm 框架基本概念、原理及sqlalchemy相關(guān)使用技巧,需要的朋友可以參考下
    2020-02-02
  • Python手搓郵件發(fā)送客戶端

    Python手搓郵件發(fā)送客戶端

    這篇文章主要為大家詳細(xì)介紹了如何使用Python手搓郵件發(fā)送客戶端,支持發(fā)送郵件,附件,定時(shí)發(fā)送以及個(gè)性化郵件正文,感興趣的可以了解下
    2025-01-01
  • python從zip中刪除指定后綴文件(推薦)

    python從zip中刪除指定后綴文件(推薦)

    這篇文章給大家介紹了python從zip中刪除指定后綴文件,然后再自動(dòng)壓縮,本文給大家提供了源碼參考,感興趣的朋友跟隨小編一起看看吧
    2019-12-12
  • 如何給Python代碼進(jìn)行加密

    如何給Python代碼進(jìn)行加密

    這篇文章主要介紹了如何給Python代碼進(jìn)行加密,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • pytorch獲取vgg16-feature層輸出的例子

    pytorch獲取vgg16-feature層輸出的例子

    今天小編就為大家分享一篇pytorch獲取vgg16-feature層輸出的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評(píng)論

锦屏县| 皮山县| 八宿县| 永顺县| 探索| 迭部县| 武山县| 攀枝花市| 旬邑县| 建德市| 永定县| 安塞县| 高淳县| 乾安县| 新平| 满洲里市| 凌源市| 卢氏县| 普陀区| 交口县| 河东区| 岐山县| 汨罗市| 昆山市| 延边| 华宁县| 桂平市| 高密市| 浪卡子县| 陵川县| 古丈县| 泸西县| 唐河县| 易门县| 平陆县| 蓬莱市| 潜江市| 杂多县| 云霄县| 华蓥市| 阜城县|