Python基础之闭包
Python基礎之閉包
一.閉包的定義 :
在一個函數(shù)的內部,再定義一個函數(shù)(內部函數(shù)) 。這個內部函數(shù)引用了外部函數(shù)的變量,并且外部函數(shù)返回這個內部函數(shù),我們把這個使用外部函數(shù)變量的內部函數(shù)稱為閉包 。
簡而言之 ,閉包就是能夠讀取外部函數(shù)內的變量的函數(shù) 。
例如 :
def f1(): # f1外部函數(shù) n = 999 # n:外部函數(shù)的變量 def f2(): # 內部函數(shù) print(n) # f2中引用f1的變量 return f2 # 外部函數(shù)f1返回內部函數(shù)f2,函數(shù)f2即是閉包#調用法一f1()()# 調用法二# result=f1()# result()形成閉包的兩個條件:
- 函數(shù)的返回值必須是被包函數(shù)對象(函數(shù)名)
- 閉包中必須引用了外層函數(shù)作用域內的變量或者形參
二.閉包的用途
①可以讀取函數(shù)內部的變量
②將一些變量的值始終保存到內存中
1.讀取函數(shù)內部的變量
在一般情況下,在函數(shù)外部我們是不能訪問到函數(shù)內部的變量的。但是,有時想要在函數(shù)外部能夠訪問到函數(shù)內部的變量,那么就可以使用閉包 。
例如:
def f1(): a=100print(a) #NameError: name 'a' is not defined上面的代碼可以看出 ,print(a)會拋異常NameError: name 'a' is not defined。在函數(shù)f1的外面無法訪問它的變量的。
在函數(shù)f1里面定義一個閉包函數(shù)就可以訪問到了
例如:
def f1(): a = 100 def f2(): return a return f2result = f1()a = result()print(a)2.將一些變量的值始終保存到內存中
def f1(n1): # 外部函數(shù) def f2(n2): # 內部函數(shù) result = n1 + n2 # 內部函數(shù)引用了外部函數(shù)的變量n1 print('計算結果:', result) return f2f=f1(1) #創(chuàng)建閉包實例#執(zhí)行閉包f(2)f(3)運行結果:
計算結果: 3計算結果: 4通過上面的輸出結果可以看出閉包保存了外部函數(shù)內的變量n1的值1