python命名空間和作用域

2022-05-08 14:57:12 字數 2672 閱讀 4079

namespace 命名空間(命名空間)

內建 命名空間: python直譯器啟動之後就可以使用的變數\函式名

全域性 命名空間:在函式外面的變數名\函式名

區域性 命名空間: 每乙個函式都擁有自己的命名空間

python直譯器執行 載入順序:

所有 內建空間函式名\變數===》逐行 載入全域性空間變數\函式名

區域性空間的變數\函式名:在呼叫函式的時候產生,呼叫結束就消失

1

前面所講:

2 a = 1

3 a = 3 #

a = 3 把 a = 1 覆蓋

4print

(a)5

6def

len_c():

7pass

8def

len_c():

9pass2

10print(len_c) 是pass2 按載入順序,len_c覆蓋

乙個變數\函式名 可以使用的區域

全域性作用域: 內建空間 全域性空間 的變數名\函式名

區域性作用域: 區域性空間 變數名\函式名

下級能用上級,反之不能 單向

下級 用 上級 不能 改 (想改的話,global 可以修改全域性變數,nonlocal 修改區域性變數,當前沒有,向上級找,截止最後的區域性空間尋找,在找不到,報錯)

globals() 儲存了全域性變數和對應的值

print(globals)

locals() 儲存了當前空間變數和對應的值

locals()

命名空間說白了,可以看做乙個字典,字典key儲存了當前空間的所有變數,,key對應的值就是變數的值

如果想要修改全域性的變數:使用global關鍵字(盡量避免,會把全域性相同的變數都給更改,就完蛋了)

如果想要修改外層函式的變數:使用nonlocal(不影響全域性)

a = 』ddfdf『         #

a 全域性空間 變數

def func1() #

func1 全域性空間 函式名

print

()

def func2() #

func2 全域性空間 函式名

func1 #

區域性空間 函式 函式func2內部沒有func1,就去上級去找 (作用域鏈)

a = 1 #

區域性空間 變數

print

()函式巢狀:

deffunc()

def func1() #

函式巢狀 定義

. .

func1

#函式巢狀 呼叫

print

(..)

--------n =0

deffunc1()

n = 1

deffunc2()

n = 2

deffunc3()

n =3

print

(n) func3()

#呼叫func3

print

(n) func2()

#呼叫 func2

print

(n)func1()

#呼叫func1

可以刪除變數n 試一試

deffunc ():

a =10b = 20

print(locals()) #

func()

------------

global

n = 1

deffunc()

global

n n = n + 1 #

不僅僅用,還把全域性命名空間中的變數n的值修改了 (這種最好不用,太危險)

func()

print(n) #

2--------n =0

deffunc():

n = 1

deffunc1():

deffunc2():

nonlocal n

#修改區域性變數 func2中沒有,向上找func1,也沒有,在向上func空間找,有變數n(如果還沒有,報錯)

n += 1

print(n) #

2func2()

func1()

func()

print(n) #

0n =0

deffunc():

n = 1

deffunc1():

deffunc2():

global n #

直接去全域性找n (如果全域性沒有,報錯)

n += 1

print(n) #

1func2()

func1()

func()

print(n) #

1golbals() 全域性命名空間 的變數和值得集合 就是個字典

locals() 區域性。。。。。。。。。。。。。

view code

所以函式名是第一類物件

Python命名空間和作用域

乙個命名空間中不能有重名,但不同的命名空間是可以重名而沒有任何影響。命名空間的生命週期取決於物件的作用域,如果物件執行完成,則該命名空間的生命週期就結束。因此,我們無法從外部命名空間訪問內部命名空間的物件。內建作用域是通過乙個名為 builtin 的標準模組來實現的,預定義了哪些變數 python ...

Python命名空間和作用域

準備知識 1.在python直譯器開始執行之後,機會在記憶體中開闢乙個空間,每當遇到 乙個變數的時候,就把變數和值之間的關係記錄下來,但是當遇到函式定義 的時候,直譯器只是把函式名讀入記憶體,表示這個函式存在,至於函式內部 的變數和邏輯,直譯器是不關心的。也就是說一開始的時候函式只是載入進 來,僅此...

Python命名空間和作用域

一 命名空間namespacs 存放名字的地方,是對棧區的劃分 有了命名空間之後,就可以在棧區中存放相同的名字,詳細的,命名空間 分為三種 1.1 內建命名空間 存放的名字 存放的python直譯器內建的名字 print input 存活週期 python直譯器啟動則產生,python直譯器關閉則銷...