閉包
定義:
1. 乙個函式可以定義在另乙個函式的內部
2. 這個函式可以訪問外部函式的變數及引數
3. 在這個函式的外部函式的外部呼叫這個函式的時候,就形成了閉包
作用:儲存函式的狀態資訊,使函式的區域性變數可以儲存下來
避免使用全域性變數(資料汙染)
提供部分資料的實現
更優雅物件導向的實現
eg:
def fun1(x):
a=10
def fun2():
return x+a
return fun2
fun1(3)()
>>>13
注意
閉包的延遲繫結特性,也就是不會立即輸出,需要呼叫在輸出,會影響結果的
遞迴
4. 遞迴就是自己呼叫自己
5. 當我們要解決乙個大問題的時候,發現大問題可以拆分多個小問題,小問題解決方法和大問題相同
6. 注意:避免無窮遞迴
7. 遞迴的效率非常低
#漢諾塔
def han(x,y,z,n):
if n==1:
print("%s--->%s"%(x,z))
else:
han(x,z,y,n-1) #把n-1個移到y底座上
print("%s--->%s"%(x,z)) #把最大的移到z底座上
han(y,x,z,n-1) #把剩餘的n-1個移到z底座上
導包
8. import 包名 (注意路徑問題)
呼叫:包名.方法名
包名就是.py檔案,包名全小寫
#test1.py
def fun1():
print('this in fun1')
#test2.py
import test1
test1.fun1()
>>>this in fun1
from 包名 import 方法名
呼叫:方法名
只匯入方法名
作用:減少了記憶體的損耗
#test2.py
from test1 import fun1
fun1()
>>>this in fun1
from 包名 import *
匯入所有方法
使用:方法名()
#test2.py
from test1 import *
fun1()
>>>this in fun1
只需要在檔案中建立乙個__init__檔案,匯入當前模組的所有檔案(.py)檔案,然後下次使用的
時候,就可以直接匯入包名,使用包名.函式名使用
from 檔案 import *
遞迴和閉包
閉包 1.定義 函式內部有函式 函式巢狀 內部函式操作外部函式的區域性變數,且外層函式的引用被賦值給變數,通過變數訪問內層函式匿名函式.2.作用 1.可以讀取函式內部的變數,2.讓這些變數的值始終保持在記憶體中,不會在f1呼叫後被自動清除。3.應用場景 迴圈繫結事件 主要用於封裝jquery外掛程式...
閉包和遞迴
閉包是內部函式在其定義內部引用了內部變數,當乙個函式執行完,內部變數又被新函式引用 def count fs for i in range 1,4 deff return i i return fsf1,f2,f3 count 結果全部都是9,返回的函式又引用變數i 並沒有立即執行,而是等到3個函式...
python函式閉包和遞迴 函式和閉包之尾遞迴
前面提到過,如果想把更新var的while迴圈轉換成僅使用val這種更函式式的風格的話,有時候你可以使用遞迴。下面的例子是通過不斷改善猜測數字來逼近乙個值的遞迴函式 var guess initialguess while isgoodenough guess guess improve guess...