一句話說清楚多個裝飾器的執行順序

2021-08-20 04:20:26 字數 1373 閱讀 3370

要理清楚多個裝飾器的執行順序,對於很多人來說是噩夢一般的存在,但是,這個其實一句話就能說明白的,先看下面**:

defout_1(func):

print('i am out_1')

definner_1():

print('i am inner_1')

returnfunc()

returninner_1

defout_2(func):

print('i am out_2')

definner_2():

print('i am inner_2')

returnfunc()

returninner_2

@out_1

@out_2

deffunc_print():

print('i am func_print')

func_print()

定義了兩個裝飾器函式,out1,out2,執行結果如下:

i am out_2

i am out_1

i am inner_1

i am inner_2

i am func_print

好吧,一句話這麼理解:裝飾器,只對函式進行裝飾,裝飾器不對裝飾器進行裝飾,所以

1~~~~out2先裝飾func_print函式,相當於執行func_print = out_2(func_print),所以先列印了 i am out_2,

2~~~~@out_2裝飾完之後,@out1再對func_print進行裝飾,並且此時的func_print已經指向了inner_2函式,所以@out_1對他進行裝飾相當於func_print= out1(inner_2)這個時候就會執行"i am out_1"的列印,

3~~~~此時的func_print就指向了inner_1,就是兩個裝飾都裝飾完畢了,最後一行**呼叫了func_print(),所以就相當於呼叫了inner_1,這個時候列印"i am inner_1"

4~~~~列印完成之後執行到inner_1裡的return func() 此時的func是inner_2,再執行inner_2列印『i am inner_2』,

5~~~~而inner_2裡還有return fun(),這時的func才是最初的func_print,最後列印『i am func_print』

以上描述看似複雜,但是你如果能理解這個黑體加粗的話,裝飾器裝飾順序就是so easy!!!!!有木有

一句話說清楚各種外貿推廣方式

1,b2b平台,相當於專業市場,比如專門的家具批發市場,像佛山的羅浮宮這種,市場會吸引客戶,客戶來了之後平台會根據演算法分流到到各個店鋪。做乙個b2b店鋪會有平台帶來的客源,能不能拿下就看自己的實力了。2,自建站做seo優化,相當於在大街上開個店,不在專業的市場裡,沒有市場帶來的客源,只能靠自己在合...

一句話說清乙個概念,乙個知識點

01 集群就是大家一起來幹活,負載均衡就是每個人都幹得差不多 同乙個專案 不能把乙個人累死,乙個人閒死。02反向 把不同的活分給最合適的人做。03分布式,把乙個專案拆分成各個子部分,交給各個相關部門完成,各部門之間要相互協調,共同完成這個大專案。04雜湊表 hash table,也叫雜湊表 是根據關...

時間與分配 從一句話說開

翻開 code quality 第四章 time performance 看到的第一句話是 時間不會讓一切同時發生。在這裡,時間是乙個活動管理的概念和工具。時間,是多麼熟悉而不起眼!但是它卻奇妙地完成了一件偉大的事業 將世界上所有生靈和非生靈的無數的不可勝數的活動劃分使之和諧完成。睡覺的時候,不會讓...