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

三 名稱空間與作用域

如果 固定 無法 函數 bsp spa turn function 表名

一 名稱空間?

  一、 什麽是名稱空間?

  二、 名稱空間的加載順序

  三、名字的查找順序

二 作用域

  一、作用域即範圍

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

  三、查看作用域:globals(),locals()

一 名稱空間?

一、 什麽是名稱空間?

#名稱空間:存放名字的地方,三種名稱空間,(例如x=1,1存放於內存中,那名字x存放在哪裏呢?名稱空間正是存放名字x與1綁定關系的地方)

二、 名稱空間的加載順序

python test.py
#1、python解釋器先啟動,因而首先加載的是:內置名稱空間
#2、執行test.py文件,然後以文件為基礎,加載全局名稱空間 #3、在執行文件的過程中如果調用函數,則臨時產生局部名稱空間

三、名字的查找順序

 1 # 局部名稱空間--->全局名稱空間--->內置名稱空間
 2 
 3 #需要註意的是:在全局無法查看局部的,在局部可以查看全局的,如下示例
 4 
 5 # max=1
 6 def f1():
 7     # max=2
 8     def f2():
 9         # max=3
10         print(max)
11     f2()
12 f1()
13
print(max)

二 作用域

、作用域即範圍

  • 全局範圍(內置名稱空間與全局名稱空間屬於該範圍):全局存活,全局有效

  • 局部範圍(局部名稱空間屬於該範圍):臨時存活,局部有效

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

 1 x=1
 2 def f1():
 3     def f2():
 4         print(x)
 5     return f2
 6 x=100
 7 def f3(func):
 8     x=2
 9     func()
10 x=10000
11 f3(f1())

三、查看作用域:globals(),locals()

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

三 名稱空間與作用域