當前位置:
首頁 > 知識 > python中全局變數和局部變數的一個小坑

python中全局變數和局部變數的一個小坑


python 中全局變數和局部變數在使用過程中的一個容易出錯的地方

什麼是全局變數

python中,在函數外部聲明的變數可以叫做全局變數。

x = 10
def fn1:
pass
fn1

什麼是局部變數

python中,在函數內部聲明的變數通常情況下稱之為局部變數,它的作用域也僅限在函數內部。

x = 10 # 全局變數
def fn1 :
y = 20 # 局部變數,只能夠在函數內部中使用
fn1 # 調用函數

容易出錯的一個點

在使用全局變數和局部變數的過程中,有一種情況十分容易出錯:

x = 10
def fn1 :
print(x)
fn1

上面這段代碼,主要是在函數fn1中調用了全局變數x ,那麼當函數調用的時候,輸出的結果為10

x = 10
def fn1:
x = 20
print(x)
fn1
print(x)

上面這段代碼的輸出結果為20、10,函數內部的print輸出的是函數內部的局部變數x,所以輸出結果為20,而在函數外部使用print輸出的結果為10,因為此時調用的是全局變數x,所以輸出為10

再來繼續看下面這段代碼:

x =10
def fn1:
print(x)
x = 20
fn1

一旦上面的這段代碼執行,程序看似沒什麼問題,但是實際卻會拋出一個錯誤,UnboundLocalError: local variable "x" referenced before assignment.

出現錯誤的原因是因為,全局變數在函數中只能夠查詢,但是卻不能夠修改。一旦修改就會報錯。

再來看剛才的一段代碼:

x = 10
def fn1:
x = 20
print(x)
fn1
print(x)

為什麼這段代碼沒有報錯呢?原因其實很簡單,因為在這段代碼中,函數外部的全局變數x值為10,但是在函數內部,第一句代碼就是重新的創建了一個變數x,值賦值為20,這個時候函數內部的x作用域是局部的,僅限於函數內部,而函數外部的x是全局的,作用域為全局。 在函數內部的代碼中,print還沒有輸出前,就重新聲明了個變數x,所以後面print輸出的x,應該為局部變數x。

而剛才拋出錯誤的代碼中是先使用的print輸出,而此時輸出的x為全局變數x,所以之後x = 20會拋出錯誤,因為python會認為,此時你不是單獨的創建一個局部變數而是在修改全局變數,這一點是python不允許的。

Tip:全局變數在函數中只能夠查看而不能夠修改。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

ABP從入門到精通(3):aspnet-zero-core 使用Redis緩存
SQL SERVER Buffer Pool擴展
原生js之千位分隔符
Golang使用pprof和qcachegrind進行性能監控
python中數字類型與處理工具

TAG:達人科技 |

您可能感興趣

「Python」Chapter1 變數和簡單數據類型
非靜態內部類中 static/final 成員變數相關的一道趣題
static 成員變數、static 成員函數、類/對象的大小
Python數據類型、運算符、變數
Python和Scala的定義變數
VBScript 變數
Shell 變數
python基礎之變數類型number(math模塊)
Perl 變數
全新斯巴魯Levorg問世有變數 EyeSight成拖累主因
linux-shell編程中awk變數的使用
Python基礎-變數、字元串、數字
Nginx 日誌和變數
Bash 環境變數的那些事
python基礎之變數與運算符
Flipkart-Walmart交易:軟銀最終會有變數嗎
Python變數很難記?記住變數類型的三種方式
nova5系列發布背後的華為變數
The Daily Beast:美朝峰會出現變數,特朗普怪罪中國
8 個有力的 Awk 內建變數