#局部變量:函數內部的變量是局部變量,作用域僅在函數內部可見(局部命名空間)
#全局變量:函數外部的變量是全局變量,作用域橫跨整個文件(全局命名空間)
#內置函數:內建命名空間
#global :關鍵字:聲明全局變量獲修改全局變量
#nonlocal :關鍵字:修改局部變量(當前函數上一層的局部變量)
#locals() :返回字典,獲取當前作用域的所有內容
如果在函數里:獲取locals()調用之前,該作用域出現的內容
如果在函數外:獲取locals()打印返回值之前,該作用域出現的內容
#globals() :返回字典,獲取全局作用域的所有內容
如果在函數里: 獲取globals()調用之前,全局作用域出現的內容
如果在函數外: 獲取globals()打印返回值之前,全局作用域出現的內容
```
#找尋變量的調用順序采用LEGB原則(即就近原則)
B —— Builtin(Python);Python內置模塊的命名空間 (內建作用域)
G —— Global(module); 函數外部所在的命名空間 (全局作用域)
E —— Enclosing function locals;外部嵌套函數的作用域(嵌套作用域)
L —— Local(function);當前函數內的作用域 (局部作用域)
依據就近原則,從下往上 從里向外 依次尋找
```
### 內部函數
```
(1)內部函數可以直接在函數外部調用么
(2)調用外部函數后,內部函數可以在函數外部調用嗎
(3)內部函數可以在函數內部調用嗎
(4)內部函數在函數內部調用時,是否有先后順序
```
### 閉包
``` # 獲取閉包函數使用的變量 __closure__ , cell_contents
閉包的定義: 內函數使用外函數的局部變量,並且外函數將內函數返回出來的方法叫閉包, 返回的內函數叫 閉包函數.
閉包的特點: 內函數使用了外函數的局部變量,外函數的局部變量與內函數發生綁定,延長該變量的生命周期 (實際內存給它存儲了這個值,暫時不釋放)
閉包的意義: 閉包可以優先使用外函數中的變量,並對閉包中的值起到了封裝保護的作用.外部無法訪問. ```