函式的命名空間和作用域

2022-06-16 20:51:15 字數 2419 閱讀 4519

內建命名空間 —— python直譯器

python直譯器一啟動就可以使用的名字儲存在內建命名空間中,內建的名字在啟動直譯器的時候被載入進記憶體裡

全域性命名空間 —— 我們寫的**但不是函式中的**

程式從上到下被執行的過程中依次載入進記憶體的,放置了我們設定的所有變數名和函式名

函式內部定義的名字,當呼叫函式的時候 才會產生這個命名空間 隨著函式執行的結束 這個命名空間就又消失了

在區域性:可以使用全域性、內建命名空間中的名字

在全域性:可以使用內建命名空間中的名字,但是不能用區域性中使用

在內建:不能使用區域性和全域性的的

def func():

a = 1

func()

print(a) # 錯誤,不能使用區域性變數

def max():

print('in max func')

print(max())

在正常情況下,直接使用內建的名字,當我們在全域性定義了和內建名字空間中同名的名字時,會使用全域性的名字,當我自己有的時候就不會找上級要了,如果自己沒有,就找上一級要,上一級沒有再找上一級,如果內建的名字空間都沒有,就報錯。
#多個函式應該擁有多個獨立的區域性名字空間,不互相共享

def input():

print('in input now ')

def func():

#input = 1

input()

func()

#func --->函式的記憶體位址 (函式名代表的是函式的記憶體位址)

#函式名() 函式的呼叫

#函式的記憶體位址()函式的呼叫

-- 作用在全域性 -- 內建和全域性名字空間都屬於全域性作用域global()檢視全域性的變數

a = 1

def func():

global a # 使用global宣告後,就可以修改全域性變數

a = 2

func()

print(a)

-- 作用在區域性 -- 函式(區域性名字空間屬於區域性作用域)locals()可以檢視區域性的變數

對於不可變資料型別 在區域性可是檢視全域性作用域中的變數,但是不能直接修改,如果想要修改,需要在程式的一開始新增global宣告,如果在乙個區域性(函式)內宣告了乙個global變數,那麼這個變數在區域性的所有操作將對全域性的變數有效。
a = 1

b = 2

def func():

x = 'aaa'

y = 'bbb'

print(locals())

func()

print(globals())

print(locals())

#globals 永遠列印全域性的名字

#locals 輸出什麼,根據locals所在的位置

a = 1

def func(a):

a = 2

return a

a = func(a)

print(a)

a = 1

def outer ():

a = 1

def inner():

b = 2

print(a)

print('inner')

def inner2():

nonlocal a #宣告了乙個上面第一層區域性變數

#global a #宣告了乙個全域性變數

a += 1 #不可變資料型別的修改

inner2()

inner()

print('**a**',a)

outer()

print('全域性:',a)

nonlocal 只能用於區域性變數 找上層中離當前函式最近一層的區域性變數,宣告了nonlocal的內部函式的變數,修改會影響到 離當前函式最近一層的區域性變數,對全域性無效,對區域性 也只是對最近的一層 有影響。
func()  			  #函式名就是記憶體位址

func2 = func #函式名可以賦值

func2()

l = [func,func2] #函式名可以作為容器型別的元素

print(l)

for i in l:

i()def func():

print(123)

def wahaha(f):

f()return f #函式名可以作為函式的返回值

qqxing = wahaha(func) #函式名可以作為函式的引數

qqxing()

函式命名空間和作用域

內建 命名空間 python直譯器啟動之後就可以使用的變數 函式名 全域性 命名空間 在函式外面的變數名 函式名 區域性 命名空間 每乙個函式都擁有自己的命名空間 python直譯器執行 載入順序 所有 內建空間函式名 變數 逐行 載入全域性空間變數 函式名 區域性空間的變數 函式名 在呼叫函式的時...

函式命名空間和作用域

內建 命名空間 python直譯器啟動之後就可以使用的變數 函式名 全域性 命名空間 在函式外面的變數名 函式名 區域性 命名空間 每乙個函式都擁有自己的命名空間 python直譯器執行 載入順序 所有 內建空間函式名 變數 逐行 載入全域性空間變數 函式名 區域性空間的變數 函式名 在呼叫函式的時...

函式 命名空間和作用域

一.命名空間。二.作用域 三函式的巢狀。今日新名詞 1 globals 函式 檢視全域性作用域的內容 2 locals 函式 檢視區域性作用域的內容 3 global 方法 呼叫全域性作用域的變數並獲得修改許可權 4 nonlocal 方法 呼叫區域性作用域的變數並獲得修改許可權.命名空間 用來存放...