1. 程式人生 > >閉包淺談

閉包淺談

 

如需轉發,請註明出處:小婷兒的python  https://www.cnblogs.com/xxtalhr/p/10261902.html 

 

閉包

一、概念

內部函式可以引用外部函式的引數和區域性變數,當外部函式返回內部函式時,相關引數和變數都儲存在返回的函式中,這種稱為“閉包(Closure即,閉包是兩個函式的巢狀,外部函式返回內部函式的引用,外部函式一定要有引數

 

1 def 外部函式(引數):
2     def 內部函式():
3         pass
4     return 內部函式

 

 

 

 

二、閉包與正常函式的區別:

 

  l 閉包格式是兩個函式的巢狀;

  l 閉包外部函式的引數可以在記憶體中保持;

  l 閉包函式就如同一個“類”,只有在該閉包函式裡的方法才可以使用其區域性變數,閉包函式之外的方法是不能讀取其區域性變數的。這就實現了面向物件的封裝性,更安全更可靠,即閉包裡面的資料是獨有的資料,與外界無影響;

  l 函式:函式中,需要使用的全域性變數,在一定程度上是受到限制的,因為全域性變數不僅僅是一個函式使用,其他的函式也可能會使用到,一旦修改會影響到其他函式使用全域性變數,所以全域性變數不能隨便修改從而在函式的使用中受到一定侷限性。

 

三、練習

例一、求和

1 def func_out(*args):   #定義內內部函式
2    def func_in():   #使用外部函式的args變數
3       sumV = sum(args)
4       return sumV   #返回內部函式
5    return func_in
6 
7 S = func_out(1, 2, 3, 2)
8 print(S())   #真正呼叫的是func_in函式

 

 

例二、判斷成績是否合格

 1 def pass_out(scoreLine):
 2    def
true_score(score): 3 if score >= scoreLine: 4 print('合格') 5 else: 6 print('不合格') 7 return true_score 8 total_score_100 = pass_out(60) 9 total_score_150 = pass_out(90) 10 total_score_100(90) 11 total_score_150(60)

 

 

例三、申明變數

 1 def func_outer(numb):
 2    def func_inner():
 3 # nonlocal是閉包內部變數的宣告:宣告變數不是區域性變數,這樣下方的程式碼可以對外部函式傳入的變數進行修改
 4       nonlocal numb
 5       numb += 1
 6       return numb
 7 
 8    return func_inner
 9 
10 
11 ret = func_outer(66)  # 得到內部函式inner的指向
12 print(ret())  # 呼叫inner函式,並列印inner函式的返回值 結果為67

 

 

歡迎關注小婷兒的部落格:

部落格園:http://www.cnblogs.com/xxtalhr/

csdnhttps://blog.csdn.net/u010986753

 

有問題請在部落格下留言或加作者微信tinghai87605025  QQ 87605025

python QQ交流群:py_data 483766429

 

OCP培訓說明連線:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培訓說明連線:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

 

小婷兒的python正在成長中,其中還有很多不足之處,隨著學習和工作的深入,會對以往的部落格內容逐步改進和完善噠。

重要的事多做幾遍。。。。。。

 

wps4AE4.tmp