国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

如何真正的了解python裝飾器

瀏覽:5日期:2022-07-14 10:05:59

合理使用裝飾器可以簡化開發,并且使得代碼更加清晰。下面我們分別介紹兩種裝飾器,不帶參數的裝飾器和帶參數的裝飾器。

一、不帶參數的裝飾器

我們用一個實際的例子來引入裝飾器的概念,比如我們現在有一個方法A(),然后我們需要在方法A()執行之前在終端打印'function is running',這時候我們可以在方法A()的開始部分加上下面的代碼:

print('function is running')

但是如果我們不想修改方法A()的代碼,也可以重新寫一個方法decorator(),然后把A()作為入參,代碼如下:

def decorator(fun): @functools.wraps(fun) def wrapper(*args, **kwargs):print('Method is running')return fun() return wrapper

python中的方法可以作為參數傳入另一個方法,所以當我們執行decorator(A)的時候,返回的是一個方法,這個方法的本質是先執行print語句,然后再執行A()。

但是這樣我們的調用代碼就需要進行修改,也就是說之前調用方法A(),現在的寫法是調用decorator(A)(),為了不影響調用的代碼,我們使用python的語法糖改造方法A()的代碼。

@decoratordef A(): # do something

實際上只是在A()的前面加上一行@decorator,這樣在我們的調用代碼就不需要改變了。

裝飾器中的@functools.wraps(fun)是為了保證返回的方法__name__屬性和入參方法fun的__name__屬性相同。

二、帶入參的裝飾器

在上面不帶參數的裝飾器中,我們實現了在執行方法A()之前打印一行固定的字符串,如果我們想要打印不同的字符串就需要用帶參數的裝飾器。實際上就是在不帶參數的裝飾器上再封裝一層即可,代碼如下:

def decorator_par(name): def decorator(fun):@functools.wraps(fun)def wrapper(*args, **kwargs): print('Method {} is running'.format(name)) return fun()return wrapper return decorator

這樣我們就可以在使用裝飾器的時候設置參數name,實現打印不同的信息。完整的代碼如下:

import functools def decorator_par(name): def decorator(fun):@functools.wraps(fun)def wrapper(*args, **kwargs): print('Method {} is running'.format(name)) return fun()return wrapper return decorator @decorator_par('A')def A(): print('I am A') @decorator_par('B')def B(): print('I am B') A()B()

執行輸出為:

Method A is runningI am AMethod B is runningI am B

可以看到我們在不改變方法調用代碼的情況下,實現了在該方法之前打印特定的信息。

以上就是裝飾器的兩種實現示例,實際開發中也可以將多個裝飾器進行嵌套,可以實現更加復雜的需求。

內容擴展:

python函數式編程之裝飾器

1.開放封閉原則

簡單來說,就是對擴展開放,對修改封閉。

在面向對象的編程方式中,經常會定義各種函數。一個函數的使用分為定義階段和使用階段,一個函數定義完成以后,可能會在很多位置被調用。這意味著如果函數的定義階段代碼被修改,受到影響的地方就會有很多,此時很容易因為一個小地方的修改而影響整套系統的崩潰,所以對于現代程序開發行業來說,一套系統一旦上線,系統的源代碼就一定不能夠再改動了。然而一套系統上線以后,隨著用戶數量的不斷增加,一定會為一套系統擴展添加新的功能。

此時,又不能修改原有系統的源代碼,又要為原有系統開發增加新功能,這就是程序開發行業的開放封閉原則,這時就要用到裝飾器了。

2.什么是裝飾器

裝飾器,顧名思義,就是裝飾,修飾別的對象的一種工具。

所以裝飾器可以是任意可調用的對象,被裝飾的對象也可以是任意可調用對象。

3.裝飾器的作用

在不修改被裝飾對象的源代碼以及調用方式的前提下為被裝飾對象添加新功能。

以上就是如何真正的了解python裝飾器的詳細內容,更多關于你真的了解python裝飾器么的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲精品一区专区 | 欧美在线视频不卡 | 久色国产 | 日本成a人片在线观看网址 日本成年人视频网站 | 国内精品99 | 亚洲一区二区三区四区五区 | 国产精品亚洲欧美日韩一区在线 | 国产精品免费一区二区三区四区 | 成人影院欧美大片免费看 | 欧美在线高清视频播放免费 | 爆操巨乳美女 | 亚洲狠狠ady亚洲精品大秀 | 亚洲免费观看视频 | 国产一级二级三级视频 | 亚洲国产天堂在线网址 | 亚洲高清国产一区二区三区 | a级精品九九九大片免费看 a级毛片免费观看网站 | 亚洲一区二区三区久久久久 | 国产a一级毛片含羞草传媒 国产a自拍 | 中国a级淫片免费播放 | 三级网站大全 | 国产成在线观看免费视频 | 欧美另类视频videosbest18 | 美女张开腿双腿让男人桶 | 午夜在线伦理福利视频 | 久久久久国产 | 国产在线视频欧美亚综合 | 中文字幕日韩在线 | 日本一区二区免费在线观看 | 蕾丝视频永久在线入口香蕉 | 国产亚洲精品精品国产亚洲综合 | 国产香港特级一级毛片 | 亚洲a级在线观看 | 久久青草免费免费91线频观看 | a三级黄色片 | 日韩不卡毛片 | 国产自产v一区二区三区c | 国产成人久久精品一区二区三区 | 久草视频资源在线 | 国产精品欧美视频另类专区 | 在线免费观看亚洲视频 |