網路程式設計 Python高階語法 閉包

2022-03-10 13:44:30 字數 1300 閱讀 3269

什麼叫閉包?通俗來說就是函式裡巢狀函式,從表現形式來看,內部函式引用外部函式的作用域裡的變數,那麼內部函式就稱為閉包

舉例說明:

1、閉包=函式塊+定義函式時的環境,inner就是函式塊,x就是環境

def

outer(x):

definnner(y):

return x+y

return

innner

a = outer(1) #

呼叫outer函式返回內部函式inner返回的的函式變數

print(a(2)) #

通過函式變數傳參並執行內部函式,然後返回函式結果

執行結果:3

2、閉包不可以直接訪問外部函式作用域的變數

def

outer1():

x = 2

definner1():

x *=x

return

x

return

inner1

print(outer1()())

執行之後會報錯,因為inner1內部不能直接呼叫外部函式的變數,但是通過下面修改就可以了

def outer1():

nolocal x # 通過nolocal關鍵字來指定x不是閉包的區域性變數

x=2def inner1():

x*=x

return x

return inner1

print(outer1()())

執行結果:4

3、實際應用場景舉例

ori = [0, 0]  #

座標原點

def create(pos=ori): #

傳入座標原點

def play(derict, step): #

方向和步長

new_x = pos[0]+derict[0]*step #

移動後點的新的x軸值

new_y = pos[1]+derict[1]*step #

移動後點的新的y軸值

#通過容器修改外部函式的區域性變數值

pos[0] =new_x

pos[1] =new_y

return

pos

return

play

a =create()

print(a([1, 0],10))

print(a([0, 1], 20))

執行結果:[10, 0]

[10, 20]

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

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

python高階程式設計 網路程式設計(二)

udp 使用者資料報協議,是乙個無連線的簡單的面向資料報的運輸層協議。udp不提供可靠性,它只是把應用程式傳給ip層的資料報傳送出去,但是並 不能保證它們能到達目的地。udp是一種面向無連線的協議,每個資料報都是乙個獨立的資訊,包括完整 的源位址或目的位址,它在網路上以任何可能的路徑傳往目的地,因此...

Python高階語法 網路程式設計 學習心得筆記

每一層都有相應的協議負責交換資訊或者協同工作 tcp ip 協議 埠 tcp udp協議 tcp socket程式設計 import socket 模擬伺服器的函式 建立乙個伺服器端 def serverfunc 1.建立socket socket.af inet 使用ipv4協議 socket.s...