#命名空間(namespace):存放名字的地方,是對棧區的劃分
#有了命名空間之後,就可以在棧區中存放相同的名字,詳細的,命名空間
#1.1 內建命名空間
#存放的名字:在python直譯器內建的名字
#存活週期:python直譯器啟動則產生,python直譯器關閉則銷毀
#1.2 全域性命名空間
#存放的名字:不是函式內定義的,也不是內建的,剩下的都是全域性命名空間
#存活週期:python檔案執行則產生,python檔案執行完畢後銷毀
#func=函式的記憶體位址
# def func(): #aaa,bbb就是區域性命名空間
# a=111
# b=222
# print(a,b)
# func()
#1.3 區域性命名空間
#存放的名字:在呼叫函式時,執行函式體**過程中產生的函式內的名字
#存活週期:在呼叫函式時存活,函式呼叫完畢後則銷毀
##同乙個函式呼叫多遍,呼叫一次產生一次區域性命名空間
#func=函式的記憶體位址
# def func(): #aaa,bbb就是區域性命名空間
# a=111
# b=222
# print(a,b)
# func()
## def func1(a,b):
# pass
## #同乙個函式呼叫多遍,呼叫一次產生一次區域性命名空間,這裡長生了三個區域性命名空間
# func(1,2)
# func(3,4)
# func(5,6)
#1.4 命名空間的載入順序
# 內建命名空間----》全域性命名空間----》區域性命名空間
#1.5 銷毀順序
# 區域性命名空間----》全域性命名空間----》內建命名空間
#1.6 名稱的查詢優先順序:從當前所在的位置向上一層一層查詢
# 內建命名空間
# 全域性命名空間
# 區域性命名空間
# 如果當前在區域性命名空間
# 內建命名空間----》全域性命名空間----》區域性命名空間
# input=333
# def func():
# input=444
# print(input) #當前站在區域性,,print在函式內,,輸出:444,注釋掉input=444,輸出:333
# func()
# 如果當前在全域性命名空間
# 全域性命名空間----》內建命名空間
# input=333
# def func():
# input=444
## func()
# print(input) #輸出:333,當前站在全域性,因為print是在全域性
#示範1:
# x=111
# def func():
# print(x) #輸出 111
# func()
#示範2:命名空間的『巢狀』關係是以函式定義階段為準,與呼叫位置無關
# x=1
# def func():
# print(x) #輸出 1
## def foo():
# x=222
# func()
## foo()
#示範3:函式巢狀定義:
# x=333
# def f1():
# x=111
# def f2():
# x=222
# print(x) #輸出 222
# f2() #調f2()
## def foo():
# x=444
# f1()
## foo()
#示範4:名字的查詢關係以定義階段為準
# x=111
# def func():
# print(x)
# x=222 #報錯,定義階段時不報錯,變數要先定義後使用
## func()
# 二、作用域--》作用範圍
# 全域性作用域:內建命名空間,全域性命名空間
# 1、全域性存活
# 2、全域性有效:被所有函式共享
# x=111
# def foo():
# print(x,id(x)) #輸出:111 140716727932000
# def bar():
# print(x,id(x)) #輸出:111 140716727932000
# foo()
# bar()
#區域性作用域:區域性命名空間
# 1、臨時存活:
# 2、區域性有效:函式內有效
# def foo(x):
# def f1():
# def f2():
# print(x)
#legb
#bulid--b
#global--g
def f1():
# edef f2():
# enclosing--e
def f3():
# local--l
print(x)
命名空間與作用域
命名空間即存放名字與物件對映 繫結關係的地方。對於x 3,python會申請記憶體空間存放物件3,然後將名字x與3的繫結關係存放於命名空間中,del x表示清除該繫結關係。在程式執行期間最多會存在三種命名空間 伴隨python直譯器的啟動 關閉而產生 因而是第乙個被載入的命名空間,用來存放一些內建的...
命名空間與作用域
定義 它是儲存作用域中變數的字典。乙個命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。分類 按照變數定義的位置,可以劃分為以下3類 local,區域性命名空間,記錄了函式中定義的所有變數,包括函式的入參 內部定義的區域性變數。使用locals 檢視區域性命名空間。返回的是字典 glo...
命名空間與作用域
有了命名空間之後,就可以在棧區中存放相同的名字,詳細的命名空間 存放的名字 內建命名空間存放的是python直譯器自帶的名字 例如 print input 生命週期 py直譯器啟動則產生,直譯器關閉則銷毀 存放的名字 只要不是內建的和函式內定義的名字,都是全域性命名空間 生命週期 python檔案執...