函式 命名空間和作用域

2022-09-04 22:12:19 字數 2158 閱讀 9106

就是繫結變數名和變數值的地方

1、內建命名空間

在python直譯器中已經存在的內建方法就可以稱之為內建命名空間

如:len()  print()  open()

2、全域性命名空間

1、定義

在py檔案中,頂格寫的都是全域性命名空間

2、注意

while true:條件下的第一縮排也屬於在全域性命名空間(如圖)

3、檢視是否在全域性命名空間的方法

globals()把所有在全域性命名空間裡面的資料,以字典形式輸出

3、區域性命名空間

1、定義

在函式體中存在的都是區域性的

2、檢視區域性的命名空間的方法

locals()  把所有在區域性命名空間裡面的資料,以字典形式輸出

看自己位置是在區域性還是全域性命名空間:

如果在區域性命名空間:區域性 >>> 全域性 >>> 內建

如果在全域性命名空間: 全域性 >>> 內建

按照名字作用範圍的不同可以將三個命名空間劃分為全域性作用域和區域性作用域:

全域性作用域:

位於全域性命名空間、內建命名空間中的名字屬於全域性範圍,該範圍內的名字全域性存活(除非被刪除,否則在整個檔案執行過程中存活)、全域性有效(在任意位置都可以使用);

區域性作用域:

位於區域性命名空間中的名字屬於區域性範圍。該範圍內的名字臨時存活(即在函式呼叫時臨時生成,函式呼叫結束後就釋放)、區域性有效(只能在函式內使用)

1、命名空間與作用域的關係在函式定義階段就已經確定,與呼叫位置無關

2、命名空間與作用域的關係在函式定義階段(掃瞄語法時)就已經確定,與什麼時候呼叫呼叫位置無關

此時引出乙個問題:python中,因為在定義階段,函式只會掃瞄語法錯誤,而不會報告邏輯錯誤。

所以,如果存在邏輯錯誤,在函式呼叫時才會報錯。

1、global關鍵字的用途

位置在區域性命名空間的變數修改為全域性名稱變數,作用域變為全域性作用域

它能使區域性變數修改全域性變數

2、注意可變型別與不可變型別

區域性變數修改全域性變數時:

1. 修改的變數是不可變的型別,需要global關鍵字宣告

2. 修改的變數是可變的型別,不需要global關鍵字宣告

1、nonlocal關鍵字的用途

他是內部的區域性,修改,外部的區域性的變數

宣告位置在區域性命名空間內的區域性命名空間的變數,修改為區域性命名空間內的變數,作用域是內部所在的區域性變數

2、注意可變型別與不可變型別

內部區域性變數修改外部區域性變數時:

1. 修改的變數是不可變的型別,需要nonlocal關鍵字宣告

2. 修改的變數是可變的型別,不需要nonlocal關鍵字宣告

函式命名空間和作用域

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

函式命名空間和作用域

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

函式 命名空間和作用域

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