什麼叫閉包?通俗來說就是函式裡巢狀函式,從表現形式來看,內部函式引用外部函式的作用域裡的變數,那麼內部函式就稱為閉包
舉例說明:
1、閉包=函式塊+定義函式時的環境,inner就是函式塊,x就是環境
defouter(x):
definnner(y):
return x+y
return
innner
a = outer(1) #
呼叫outer函式返回內部函式inner返回的的函式變數
print(a(2)) #
通過函式變數傳參並執行內部函式,然後返回函式結果
執行結果:3
2、閉包不可以直接訪問外部函式作用域的變數
defouter1():
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...