一函數的註釋
官方推薦 # 查看註釋: func名.__doc__ # 查看註釋: func名.__name__
二嵌套函數
![](http://static.javashuo.com/static/loading.gif)
# 第一種函數嵌套 在函數func內 # def func(): # print(3) # def f(): # print(1) # print(2) # f() # func() # 第二種函數嵌套 多個函數嵌套調用 # def func(): # a = 1 # def log(): # a = 5 # def info(): # a = 10 # print(a) # print(a) # print(a) # func()
三名稱空間
一 名稱空間的加載順序html
python test.py #一、python解釋器先啓動,於是首先加載的是:內置名稱空間 #二、執行test.py文件,而後以文件爲基礎,加載全局名稱空間 #三、在執行文件的過程當中若是調用函數,則臨時產生局部名稱空間
二 名字的查找順序python
局部名稱空間--->全局名稱空間--->內置名稱空間 #須要注意的是:在全局沒法查看局部的,在局部能夠查看全局的,以下示例 # max=1 def f1(): # max=2 def f2(): # max=3 print(max) f2() f1() print(max)
名稱空間 # 加載順序: # 1.內置空間 # 2.全局空間 # 3.局部空間 # 取值順序: # 1.局部空間 # 2.全局空間 # 3.內置空間
四做用域
# 全局做用域 內置 + 全局
# 局部做用域 局部
# global : 在局部修改所有變量,若是沒有就建立一個新的.建立後的只能賦值,
# nonlocal : 在局部空間內,修改離本身最近的變量,若是上一層沒有就繼續向上找,
# 直到找到局部變量的頂層,局部空間內沒有能夠修改的變量,就報錯
全局變量中沒有a,用global 則會建立一個,建立後不可修改, def test(): global a a = 10 test() print(a) def test(): global a a += 10 test() print(a) NameError: name 'a' is not defined 不可修改 複製代碼
![](http://static.javashuo.com/static/loading.gif)
#一、做用域即範圍 - 全局範圍(內置名稱空間與全局名稱空間屬於該範圍):全局存活,全局有效 - 局部範圍(局部名稱空間屬於該範圍):臨時存活,局部有效 #二、做用域關係是在函數定義階段就已經固定的,與函數的調用位置無關,以下 x=1 def f1(): def f2(): print(x) return f2 x=100 def f3(func): x=2 func() x=10000 f3(f1()) #三、查看做用域:globals(),locals() LEGB 表明名字查找順序: locals -> enclosing function -> globals -> __builtins__ locals 是函數內的名字空間,包括局部變量和形參 enclosing 外部嵌套函數的名字空間(閉包中常見) globals 全局變量,函數定義所在模塊的名字空間 builtins 內置模塊的名字空間 做用域