''' 命名空間?:?每次在python解釋器啟動之后,就會在內(nèi)存開辟一塊內(nèi)存空間,每當(dāng)遇到一個變量時,就會在命名空間中,記錄下變量名和值之間的關(guān)系,也即記錄變量對應(yīng)的值在內(nèi)存空間中的 ???????????地址;當(dāng)一個函數(shù)時,會在命名空間中記錄下函數(shù)名以及函數(shù)的地址; 內(nèi)置命名空間?:?解釋器啟動伊始開辟聲明內(nèi)置函數(shù)的內(nèi)存空間; 局部命名空間?:?在函數(shù)內(nèi)部,為變量或函數(shù)開辟的命名空間; 作用域?:?函數(shù)或變量的生命周期; 查看全局作用域中的所有內(nèi)容?:?globals() 查看局部作用域中的所有內(nèi)容?:?locals() 函數(shù)的嵌套?:?也即支持在一個函數(shù)內(nèi)部可以定義另一個函數(shù) 慎用?: ????當(dāng)需要在局部作用域內(nèi),對全局變量進行操作時,需以global關(guān)鍵字聲明,要直接對全局變量進行操作,這里的全局,包括絕對全局和相對全局,也即可以對所有大于當(dāng)前作用域的所有 ????作用域內(nèi)的所有變量進行聲明 ????當(dāng)需要對大于當(dāng)前作用域,但又并非全局作用域內(nèi)的變量進行操作時,需以nonlocal關(guān)鍵字聲明該變量; 重點(神坑)?:?定義函數(shù)時,在同一個代碼塊內(nèi),多次調(diào)用同一個函數(shù),默認值參數(shù)對應(yīng)的內(nèi)存空間始終不變,對默認值參數(shù)進行修改也始終是在默認值參數(shù)對應(yīng)內(nèi)存空間上進行修改; ????案例(從指針的角度理解)?: ????def?test(value,?lst?=?[])?: ????lst.append(value) ????print(lst) ????return?lst ????lst1?=?test("a")????#第一次調(diào)用test函數(shù),在lst所在內(nèi)存空間寫入值a,打印a,并返回lst的地址 ????lst2?=?test("b",?[])????#第二次調(diào)用test函數(shù),由于我們這次沒有使用lst的默認值,而是手動賦值,因此會為lst形參開辟一塊新的內(nèi)存空間,并寫入值b,打印b, ?????????????????????????????返回新開辟的內(nèi)存空間的地址; ????lst3?=?test("c")????#第三次調(diào)用test函數(shù),由于再次使用了lst的默認值,所以會在lst默認開辟的內(nèi)存空間內(nèi)寫入c,也即["a",?"c"],打印["a",?"c"],并返回其地址; ????print(lst1)?????#lst1接收到的為test函數(shù)為lst默認開辟的內(nèi)存空間的地址,而默認的內(nèi)存空間存的是["a",?"c"],因此打印結(jié)果為["a",?"c"] ????print(lst2)?????#lst2接收的是為實參新開辟的內(nèi)存空間的地址,存的值為["b"],因此打印結(jié)果為["b"] ????print(lst3)?????#lst2接收到的為為默認形參lst開辟的內(nèi)存空間的地址,存的值為["a",?"c"],因此打印結(jié)果為["a",?"c"] ????結(jié)果?: ???['a'] ???['b'] ???['a',?'c'] ???['a',?'c'] ???['b'] ???['a',?'c'] '''
本文名稱:Python之全局與局部變量
瀏覽路徑:http://chinadenli.net/article4/jsihie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、ChatGPT、網(wǎng)站設(shè)計、網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)