Python爬坑之變量作用域
本文是基於Python3進行說明
talk is cheap,show me the code.
- 變量作用域
- python 中塊級作用域概念
- 作用域鏈
- 把局部變量變成全局變量
變量作用域
在python中,定義一個函數是通過關鍵字 def
來定義的。同大多數語言一樣,python也具有全局變量
和局部變量
num = 100 # 全局作用域變量num
def add(a, b): # 通過def來定義一個add函數
num = a + b # 函數內部作用域局部變量num
print(num)
add(1, 2) # 打印 3
print(num) # 打印 100
一般情況下,在全局作用域
中是無法訪問局部作用域
中的變量的:
def demo():
c = 10 # 函數內部有一個變量 c
print(c) # 此時在函數外部打印c是會報錯的 因爲在全局作用域中沒有變量c
塊級作用域概念
在 python 中沒有塊級作用域的概念。函數內部可以是一個作用域,但沒有塊作用域(比如if / for ..的作用域
)。類似於在其他語言中的塊級作用域 在python中這些塊級作用域
就和函數作用域
是一個級別的。所以 在python中可以在 for 循環外部
獲取 for 循環內部
的值
def demo():
c = 10 # 函數內部變量c
for i in range(0, 10): # for循環
a = 'tiger' # for循環內部變量a
c += 1 # for循環內部操作for循環外部變量c
print(a) # 在python中 可以在for循環外部直接獲取到for循環內部的變量
print(c) # 此時 函數內部變量c 相對於for循環內部是 全局變量
demo()
作用域鏈
和JS一樣,python中也有作用域鏈:
c = 1
def func1():
c = 2 # 如果沒有此處變量c的聲明 那麼就會向上一級請尋找 即 c = 1
def func2():
c = 3 # 如果沒有此處變量c的聲明 那麼就會向上一級請尋找 即 c = 2
print(c)
func2()
func1()
局部變量變成全局變量
我們知道, 一般情況下,在全局作用域中是無法訪問局部變量的。但是可以通過關鍵字global
將一個局部變量變成一個全局變量,從而就可以在全局作用域中訪問局部中的變量了
def demo():
global c # 通過global關鍵字將局部變量變成全局變量
c = 100
demo()
print(c) # 雖然沒有在全局中定義變量c,但是在函數內部使用了global關鍵字來定義變量c,使c變成一個全局變量