1. 程式人生 > >名稱空間與作用域

名稱空間與作用域

引用 efi 執行 error: 有效 域名 內部 內部函數 沒有

一、名稱空間

名稱空間分三種:

  1. 內置名稱空間
    • Python解釋器自帶的名字,Python解釋器啟動就會生成內置名稱空間
  2. 全局名稱空間
    • 文件級別定義的名字(頂頭寫,無縮進),都會存放在全局名稱空間,執行Python文件時會產生,文件執行完失效
  3. 局部名稱空間
    • 定義在函數內部的名字,局部名稱空間只有在函數調用時生效,調用完失效

三者的加載的順序:內置名稱空間-->全局名稱空間-->局部名稱空間

取值順序為:

  1. 從局部開始取值的順序:局部名稱空間-->全局名稱空間-->內置名稱空間
  2. 從全局開始取值:全局名稱空間-->內置名稱空間
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()

作用域

作用範圍為:

  1. 全局作用域:全局名稱空間和內置名稱空間,屬於全局範圍,在整個文件的任意位置都能被引用,全局有效
  2. 局部作用域:局部名稱空間,屬於局部範圍,只在函數中可以被引用,局部有效

查找順序是:局部作用域-->全局作用域

函數對象

函數的第一類對象,指的是函數可以被當做數據傳遞

  • 可以被引用
  • 可以當做函數的參數
  • 可以當做函數的返回值
  • 可以當做容器類型的元素

閉包

閉包函數:函數內部定義的函數稱為內部函數,該內部函數包含對外部作用域而不是對全局作用域名字的引用,那麽該函數稱為閉包函數

名稱空間與作用域