命名空間的載入順序: 1.啟動直譯器載入全域性命名空間(內建函式等) 2.執行py檔案執行全域性命名空間(for if while) 3.執行函式執行區域性命名空間
"""什麼是命名空間?
存放名字的空間
如果你想訪問乙個變數值,必須先方向對應的命名空間,拿到名字和對應的記憶體位址的繫結關係
命名空間的分類:
1、內建命名空間:
python提前給你的定義完的名字,就是存在內建命名空間 如:len max 等內建函式
2、全域性命名空間
存放於檔案級別的名字,就是全域性命名空間
if while for 內部定義的名字執行之後都存放於全域性命名空間
3、區域性命名空間
函式內部定義的所有名字都是存放與當前函式的內建命名空間
生命週期:
1、內建命名空間
在python直譯器啟動的時候生效,關閉直譯器的時候失效
2、全域性命名空間
當你啟動當前這個py檔案的時候生效,當前頁面**執行結束之後失效
3、區域性命名空間
當你呼叫當前函式時生效,函式體最後一行**執行結束就失效
命名空間的查詢順序:
"""
"""命名空間的查詢順序:
區域性:區域性 > 全域性 > 內建
全域性:全域性 > 內建 # 內建再找不到就報錯
# 函式內部使用的名字,在定義階段已經規定死了,與你的呼叫位置無關
"""#
x = 1##
#x = 2
#index() # 定義裡面包含呼叫
#def index(): 定義
#x = 3
#print(x)##
####
#x = 1
#def inner():
#x = 2##
print(x)##
#inner()
####
defindex():
x = 2
#print(x)
(x)x = 1
def index(arg =x):
(x)
(arg)
x = 2index()
"""作用域的分類:
1、全域性作用域
全域性可以呼叫的名字就存在於全域性作用域
內建命名空間+全域性命名空間
2、區域性作用域
區域性可以呼叫的名字就存放與區域性作用域
區域性命名空間
global:宣告全域性變數(***)
nonlocal:在區域性命名空間宣告區域性變數,在區域性修改上層函式的變數(*)
只有可變型別可以在區域性修改外部變數的值 (*****)
"""#
x = 1##
def index(): # 定義
#global x # 宣告為全域性變數並修改值
#x = 2
#index() # 呼叫 :在定義階段,函式只會被讀,不會被執行,一旦被呼叫 函式體會被執行
#print(x)
######## 函式先定義 後執行,函式體內的執行語句不會被執行,只有被呼叫的時候才會執行
#l1 =
#def index(a):##
print(l1)
#index(1)##
print(l1)
######## 區域性變數的修改無法影響只能影響到上一層
defindex():
x = 1
defindex2():
nonlocal x
x = 2index2()
(x)index()
#例題 :
deff3():
x = 4
deff1():
y = 2
deff2():
nonlocal x
x = 3f2()
(x) f1()
(x)f3() 結果 33
函式與命名空間
格式 返回值 引數 可變引數 內聯函式 函式過載 格式 返回型別 函式名 函式引數型別 函式引數,如果沒有形參可以直接在函式名後面加 或者 void 返回值說明 有返回值函式 無返回值函式 例子 例1 有返回值 double max double a,double b 例2 無返回值 void sh...
繼承(4) 命名空間與鏈式呼叫
命名空間 管理變數,防止汙染全域性,適用於模組化開發 var name bcd var init function return function init abc 是不是外面的name與裡面的name沒有相互影響。思考問題 如何實現鏈式呼叫模式 模仿jquery 他咋這麼強大呢,能乙個方法乙個方法...
C 命名空間 預設命名空間與匿名命名空間
2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...