函式呼叫與 命名空間

2022-06-13 20:06:12 字數 2112 閱讀 3561

命名空間的載入順序: 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)

print

(x)x = 1

def index(arg =x):

print

(x)

print

(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()

print

(x)index()

#例題 :

deff3():

x = 4

deff1():

y = 2

deff2():

nonlocal x

x = 3f2()

print

(x) f1()

print

(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語言裡簡單...