python基礎之名稱空間和作用域、函數嵌套
阿新 • • 發佈:2017-06-13
空間 dir pri 引用 value log 關系 fun ret
一、名稱空間
1、定義:存放名字與值的綁定關系
2、名稱空間分為:內置名稱空間、全局名稱空間、局部名稱空間
內置名稱空間:python解釋器自帶的名字,python解釋器啟動就會生成
全局名稱空間:文件級別定義的名字都會存放與全局名稱空間,執行python文件時會產生
局部名稱空間:定義在函數內部的名字,局部名稱空間只有在調用函數時才會生效,函數調用結束則失效
3、加載的順序:三者的加載順序:內置名稱空間->全局名稱空間->局部名稱空間
4、取值的順序:局部名稱空間->全局名稱空間->內置名稱空間7
# # max=10 # def func(): #x=1 # # max=20# print(max) # # # func() # max=10 # # def func(): #x=1 # max=20 # # print(max) # func() # # # print(max) # # # x=0 # def f1(): # # x=1 # def f2(): # # x=2 # def f3(): # # x=3 # print(x) # f3() # f2() # # f1()
二、作用域
1、範圍:
全局作用域:內置名稱空間與全局名稱空間的名字屬於全局範圍,在整個文件的任意位置都能被引用,全局有效
局部作用域:局部名稱空間的名字屬於局部範圍,只在函數內部可以被引用,局部有效
# x=1 # def foo(): # def f2(): # print(x) # f2() # def bar(): # print(x) # # foo() # bar() # def f1(): # x=1 # def f2(): #f2=value # # x=2 # print(x) # f2() # f1() x=1 def func(): x=2 def f1():pass #print(dir(globals()[‘__builtins__‘])) #全局作用域name # print(locals()) #局部作用域name func() print(globals() is locals())
2、作用順序是:局部作用域》》》》》》全局作用域
三、函數嵌套
1、函數的嵌套定義
def f1(): def f2(): def f3(): print(‘from f3‘) print(‘from f2‘) f3() print(‘from f1‘) f2() # print(f1) f1()
2、函數的嵌套調用
def max2(x,y): if x > y: return x else: return y def max4(a,b,c,d): res1=max2(a,b) #23 res2=max2(res1,c) #23 res3=max2(res2,d) #31 return res3 print(max4(11,23,-7,31))
python基礎之名稱空間和作用域、函數嵌套