名稱空間與作用域
阿新 • • 發佈:2017-06-13
引用 efi 執行 error: 有效 域名 內部 內部函數 沒有
一、名稱空間
名稱空間分三種:
- 內置名稱空間
- Python解釋器自帶的名字,Python解釋器啟動就會生成內置名稱空間
- 全局名稱空間
- 文件級別定義的名字(頂頭寫,無縮進),都會存放在全局名稱空間,執行Python文件時會產生,文件執行完失效
- 局部名稱空間
- 定義在函數內部的名字,局部名稱空間只有在函數調用時生效,調用完失效
三者的加載的順序:內置名稱空間-->全局名稱空間-->局部名稱空間
取值順序為:
- 從局部開始取值的順序:局部名稱空間-->全局名稱空間-->內置名稱空間
- 從全局開始取值:全局名稱空間-->內置名稱空間
x=111 #如果局部空間沒有值,那就去全局空間取值 def foo(): #x=55555 #首先從局部空間取值 print(x) foo() max=222 def foo(): max=333 print(max) #首先從全局名稱空間取值,沒有就去內置名稱空間取值 foo()
# x=0 #局部名稱空間沒有,就在全局名稱空間找,如果也沒有,就去內置名稱空間找,沒有,就報錯NameError: name ‘x‘ is not defined
# def f1():
# # x=1 #下一級再沒有,那就從這一級找
# def f2():
# # x=2 #x=3被註釋掉,則往上一級,也就是本級查找
# def f3():
# # x=3 #先從本級查找
# print(x)
# f3()
# f2()
# f1()
作用域
作用範圍為:
- 全局作用域:全局名稱空間和內置名稱空間,屬於全局範圍,在整個文件的任意位置都能被引用,全局有效
- 局部作用域:局部名稱空間,屬於局部範圍,只在函數中可以被引用,局部有效
查找順序是:局部作用域-->全局作用域
函數對象
函數的第一類對象,指的是函數可以被當做數據傳遞
- 可以被引用
- 可以當做函數的參數
- 可以當做函數的返回值
- 可以當做容器類型的元素
閉包
閉包函數:函數內部定義的函數稱為內部函數,該內部函數包含對外部作用域而不是對全局作用域名字的引用,那麽該函數稱為閉包函數
名稱空間與作用域