閉包 遞迴和導包

2021-09-30 20:55:52 字數 1583 閱讀 4780

閉包

定義:

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