python
的作用域一共有
4種,分別是:
l (local) 區域性作用域
e (enclosing) 閉包函式外的函式中
g (global) 全域性作用域
b (built-in) 內建作用域
以l –> e –> g –>b
的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。
x = int(2.9) # 內建作用域
g_count = 0 # 全域性作用域
def outer():
o_count = 1 # 閉包函式外的函式中
def inner():
i_count = 2 # 區域性作用域
內建作用域
內建作用域是通過乙個名為
builtin
的標準模組來實現的,但是這個變數名自身並沒有放入內建作用域內,所以必須匯入這個檔案才能夠使用它。在
python3.0
中,可以使用以下的**來檢視到底預定義了哪些變數:
import builtins
dir(builtins)
全域性變數,區域性變數舉例
defchangeme
(mylist):
# "修改傳入的列表"
1, 2, 3,
4])
# 這裡沒有定義,也沒有報錯,說明milist以已經存在,修改的是全域性變數
print("
函式內取值1: "
, mylist)
("2"
, id
(mylist))
# mylist.clear()
mylist = [9,
8,7,
6,] #
這裡定義的是區域性變數,和函式外定義的同名列表的id是不一樣的,乙個是區域性變數乙個是全域性變數,以下在修改是區域性變數,和全域性變數沒有關係。對可更改型別的引用進行修改,結果就不一樣了。
print("global函式內取值2: "
, mylist)
("3"
, id
(mylist))
return
mylist
# 呼叫changeme函式
mylist = [
10,
20, 30]
("1"
, id
(mylist))
("4"
, id
(changeme(mylist)))
print("
函式外取值: "
, mylist)
("5"
, id
(mylist))
:當內部作用域想修改外部作用域的變數時,就要用到
global
和nonlocal
關鍵字了。
nonlocal
:如果要修改巢狀作用域(
enclosing
作用域,外層非全域性作用域)中的變數則需要
nonlocal
關鍵字了(在二層函式中修改一層函式的區域性變數)
作用域,變數作用域,作用域鏈知識
第2章 變數作用域 第3章 作用域鏈 預覽 1.全域性作用域 整個script標籤下 或者是單獨的js檔案 外部js 2.區域性作用域也叫 函式作用域 在函式內部就是區域性作用域 這個 的名字 變數 只在函式內部起作用和效果 3.不同作用域下,定義相同變數名是不衝突的。如果是在同一作用域宣告2個相同...
變數作用域
python任何變數都有其特定的作用域 在函式內部的變數一般只能在函式內部使用,這些只能在程式特定的區域使用的變數稱為區域性變數.在乙個檔案頂部,在函式的外部定義的變數,可以供該檔案的任何函式呼叫,這樣的變數稱為全域性變數 區域性變數和全域性變數的關係 區域性變數可以通過global關鍵字強制宣告為...
變數作用域
1 全域性變數 定義在函式外邊的變數,通常函式是無法直接獲取到外部變數的,需要獲取時得需要在函式裡加global方法 例如在外部定義乙個a 5 fu ncti onte st sum 此時是無法直接獲取到a的 方法就 是 fu ncti onte st sum echo test 2 靜態變數 st...