python變數作用域

2021-07-24 02:19:59 字數 1996 閱讀 8657

變數作用域(scope)在python中是乙個容易掉坑的地方。

什麼是作用域

作用域簡單說就是乙個變數的命名空間。**中變數被賦值的位置,就決定了哪些範圍的物件可以訪問這個變數,這個範圍就是命名空間。python賦值時生成了變數名,當然作用域也包括在內。

python的作用域一共有4中,分別是:

l (local) 區域性作用域

e (enclosing) 閉包函式外的函式中

g (global) 全域性作用域

b (built-in) 內建作用域

以 l --> e --> g -->b 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。

python除了def/class/lambda 外,其他如: if/elif/else/  try/except  for/while並不能改變其作用域。定義在他們之內的變數,外部還是可以訪問。

理解全域性變數和區域性變數

1.定義的函式內部的變數名如果是第一次出現, 且在=符號前,那麼就可以認為是被定義為區域性變數。在這種情況下,不論全域性變數中是否用到該變數名,函式中使用的都是區域性變數。例如:

num = 100

def func():

num = 123

print num

func()

#輸出結果是123。說明函式中定義的變數名num是乙個區域性變數,覆蓋全域性變數。

再例如:

num = 100

def func():

num += 100

print num

func()

#輸出結果是:unboundlocalerror: local variable 'num' referenced before assignment。提示錯誤:區域性變數num在賦值前被應用。

#也就是說該變數沒有定義就被錯誤使用。由此再次證明這裡定義的是乙個區域性變數,而不是全域性變數。

2.函式內部的變數名如果是第一次出現,且出現在=符號後面,且在之前已被定義為全域性變數,則這裡將引用全域性變數。例如:

num = 100

def func():

x = num + 100

print x

func()

#輸出結果是200。

def func():

x = num + 100

print x

func()

#輸出結果是:nameerror: global name 'num' is not defined。

3.函式中使用某個變數時,如果該變數名既有全域性變數也有區域性變數,則預設使用區域性變數。例如:

num = 100

def func():

num = 200

x = num + 100

prinx x

func()

#輸出結果是300。

4.在函式中將某個變數定義為全域性變數時需要使用關鍵字global。例如:

num = 100

def func():

global num

num = 200

print num

func()

print num

#輸出結果分別是200和200。這說明函式中的變數名num被定義為全域性變數,並被賦值為200。

再例如:

num = 100

def func():

global num

num = 200

num += 100

print num

func()

print num

#輸出結果分別是300和300。

Python 變數作用域

g global defchange global g g g change print g change print g 結果 global globalchange def function g function deflocalvar g local defglobalvar global g...

變數作用域 python

python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在 賦值的。變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是 以 l e g b 的規則查詢,即 在區域性找不到,便會去區域性外的區域性找 例如閉包 再找不到就會去全...

Python變數作用域

python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在 賦值的。變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是 l local 區域性作用域 e enclosing 閉包函式外的函式中 g global 全域性作用域...