理論:裝飾器就是執行乙個函式之前首先執行裝飾器函式,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的**前提下給函式增加新的功能。
1、單個裝飾器裝飾乙個函式:通用裝飾器看下面**
defverify(func):
def call_fun(*args, **kwargs):
print('
許可權驗證1')
return func(*args, **kwargs)
return
call_fun
@verify
deftest1(num):
(num)
test1(2222)
2、多個裝飾器裝飾同乙個函式
#多個裝飾器裝飾同乙個函式
defset_func1(func):
def call_func1(*args, **kwargs):
print('
我是call_fun1')
func(*args, **kwargs)
print('
11111')
return
call_func1
defset_func2(func):
def call_func2(*args, **kwargs):
print('
我是call_fun2')
func(*args, **kwargs)
print('
222222222222222')
return
call_func2
@set_func1
#test=set_func1(call_func2)=call_func1
@set_func2 #
test=set_func2(test)=call_func2
deftest():
print('
test test')
test()
執行結果:
我是call_fun1
我是call_fun2
test test
222222222222222
1111
上述**解釋:
程式從上往下執行,遇到@set_func1判斷下面不是乙個函式,所以不裝飾繼續往下,遇到@set_func2判斷下面是乙個函式進行裝飾,即test=set_func2(test)=call_func2,裝飾
完後,@set_func1下面變成了乙個call_func2函式,此時也需要裝飾,即test=set_func1(call_func2)=call_func1,裝飾完畢,程式執行的順序是:先呼叫@set_fun1中的call_func1,執行其中的func(),
在func()中呼叫call_func2,再在call_func2中執行func(),此時的func()指向的是原函式test()
所以這裡關鍵點在:最上面乙個裝飾器中的func()函式指向的是下面乙個裝飾器中的內部函式,即call_func()
網路程式設計 Python高階語法 閉包
什麼叫閉包?通俗來說就是函式裡巢狀函式,從表現形式來看,內部函式引用外部函式的作用域裡的變數,那麼內部函式就稱為閉包 舉例說明 1 閉包 函式塊 定義函式時的環境,inner就是函式塊,x就是環境 def outer x definnner y return x y return innner a ...
python高階程式設計 網路程式設計(二)
udp 使用者資料報協議,是乙個無連線的簡單的面向資料報的運輸層協議。udp不提供可靠性,它只是把應用程式傳給ip層的資料報傳送出去,但是並 不能保證它們能到達目的地。udp是一種面向無連線的協議,每個資料報都是乙個獨立的資訊,包括完整 的源位址或目的位址,它在網路上以任何可能的路徑傳往目的地,因此...
Python高階語法 網路程式設計 學習心得筆記
每一層都有相應的協議負責交換資訊或者協同工作 tcp ip 協議 埠 tcp udp協議 tcp socket程式設計 import socket 模擬伺服器的函式 建立乙個伺服器端 def serverfunc 1.建立socket socket.af inet 使用ipv4協議 socket.s...