day15 命名空間與作用域

2022-07-10 13:27:13 字數 2724 閱讀 9098

#命名空間(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檔案執...