網路程式設計 Python高階語法 裝飾器

2022-03-10 13:44:29 字數 1590 閱讀 3254

理論:裝飾器就是執行乙個函式之前首先執行裝飾器函式,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的**前提下給函式增加新的功能。

1、單個裝飾器裝飾乙個函式:通用裝飾器看下面**

def

verify(func):

def call_fun(*args, **kwargs):

print('

許可權驗證1')

return func(*args, **kwargs)

return

call_fun

@verify

deftest1(num):

print

(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...