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

九、名稱空間、作用域

有效 uil brush light 全局 向上 內部 外部 沒有

名稱空間

  就是存放名字的一個地方

a = 1
開辟內存,存入1,a 指向 1的內存地址
a存放在名稱空間,存的是a和1的綁定關系

 

三種名稱空間:

  一、內置名稱空間

python自帶的都存放在這,解釋器啟動後就加載生成該名稱空間存放內置的名字,關閉解釋器就失效
如:print、len、max

  二、全局名稱空間

在文件級別定義的,都會存在全局名稱空間
在執行py文件時就會生成該名稱空間,name就生效,程序運行完畢就失效
如:text.py中頂頭寫,不縮進: name = ‘shuai‘
這個name就存放在該空間

  三、局部名稱空間

在代碼塊中定義的名字
如:函數內部定義的
    def foo(x):
        print(x)
    doo(3)

這裏的x就是在局部名稱空間中,只有調用函數才生效,函數結束就失效

  加載順序:內置--->全局--->局部

  取值順序:從當前使用位置向上一層層找 如在函數:內置<---全局<---局部;如果都沒有的話就提示NameError

作用域:

作用範圍:
    全局範圍(內置名稱空間與全局名稱空間屬於該範圍):全局有效
    局部範圍(局部名稱空間屬於該範圍):局部有效

作用域關系是在函數定義階段就已經固定的,與函數的調用位置無關

查看作用域:
  LEGB 代表名字查找順序: locals -> enclosing function -> globals -> __builtins__
  locals 是函數內的名字空間,包括局部變量和形參
  enclosing 外部嵌套函數的名字空間(閉包中常見)
  globals 全局變量,函數定義所在模塊的名字空間
  builtins 內置模塊的名字空間

  

九、名稱空間、作用域