python notice7 命名空間和函式巢狀

2022-08-09 03:57:12 字數 1603 閱讀 7463

一、命名空間

在python直譯器開始執行之後,會在記憶體中開闢乙個空間,每當遇到乙個變數的時候,就會把變數名和值之間的關係記錄下來,但是當遇到函式定義的時候,直譯器先把函式名讀入到記憶體中,不管函式內部的變數和邏輯。當函式被呼叫和訪問時,直譯器才會根據函式內部宣告的變數來開闢變數的內部空間,隨著函式執行完畢,這些函式內部變數占用的空間也會隨著函式執行完畢而被釋放。

命名空間:存放變數的名字和值的空間。

命名空間分類:

1.全域性命名空間:直接在py檔案中, 函式外宣告的變數都屬於全域性命名空間。  

2.區域性命名空間:在函式中宣告的變數會放在區域性命名空間。

3.內建命名空間:存放python直譯器內建函式或者變數的空間。

載入順序:

1.內建命名空間。

2.全域性命名空間。

3.區域性命名空間。(函式被執行時)

取值順序:

1.區域性命名空間。

2.全域性命名空間。

3.內建命名空間。

二、作用域:作用範圍

1.全域性作用域:全域性命名空間 + 內建命名空間

2.區域性作用域:區域性命名空間

可通過globals()函式檢視全域性作用域中的內容;通過locals()函式檢視區域性作用域中的變數和函式資訊。

a = 10

deffunc():

a = 40b = 20

print(globals()) #

列印全域性作⽤用域中的內容

print(locals()) #

列印區域性作⽤用域中的內容

func()

三、函式的巢狀

在函式內部定義函式,並呼叫。

#

函式的巢狀

deffun1():

print(222)

deffun2():

print(666)

print(444)

fun2()

print(888)

print(333)

fun1()

print(555)

關鍵字global和nonlocal使用:

global:在函式內部引入全域性變數,同時可以修改全域性變數。

nonlocal:在函式內部中,內層函式訪問外層函式中的區域性變數,也可以對其修改。

a = 100

deffunc():

global a #

引入全域性變數a

a = 28 #

修改全域性變數a

print(a) #

28func()

print(a) #

28

a = 10

deffunc1():

a = 20

deffunc2():

nonlocal a

#引入父級函式變數

a = 30 #

修改父級函式變數

print

(a) func2()

print(a) #

10func1() #

30

第7天 重新命名

其實這一條很好理解,就是對類名,變數名,引數名,方法名亂寫,這樣很容易搞錯 比方說起一些名字叫a1,a2就比較難以理解 應該起一些更加具有描述性,更助於理解的名字 示例 舊 code public class person public decimal clchrlypr 重構後的 code cha...

CentOS7系統重新命名

centos7系統重新命名 1 檢視系統版本 root test cat etc redhat release centos linux release 7.4.1708 core 2 修改名稱 hostnamectl 是在 centos7 中新增加的命令,它是用來修改主機名稱的 root test...

關於centos7的網絡卡命名

在進行centos7的pxe安裝測試中發現了網絡卡命名不再遵從來有的命名規則而啟用了最新的命名方式,官網文件描述如下 在 red hat enterprise linux 7 中,和 支援大量不同的命名方案。預設行為是根據韌體 拓撲及位置資訊分配固定名稱。這個命名方法的優點是完全自動且可 即使新增或...