首頁技術文章正文

什么是局部變量?什么是全局變量?

更新時間:2021-11-12 來源:黑馬程序員 瀏覽量:

IT培訓班

Python變量并不是在哪個位置都可以訪問的,具體的訪問權限取決于變量定義的位置,其所處的有效范圍視為變量的作用域。根據(jù)作用域的不同,變量可以劃分為局部變量和全局變量。本節(jié)將針對局部變量和全局變量進行詳細地講解。

1.局部變量

在函數(shù)內部定義的變量稱為局部變量,局部變量只能在定義它的函數(shù)內部使用。

例如,定義一個包含局部變量count的函數(shù)test(),在函數(shù)的內部和外部分別訪問變量count,代碼如下:

def test():
count=0                                #局部變量
print (count)                          #函數(shù)內部訪問局部變量
test()                                 #函數(shù)外部訪問局部變量
print(count)

執(zhí)行程序,程序執(zhí)行的結果如下:

0
Traceback (most recent call last):
File "C:/Osers/admin/FycharmProjects/測試/func.py",line 6,in <module>
print (count)
NameError: name 'count' is not defined

以上程序在打印count的值之后又打印了錯誤信息“name 'count'is not defined”由此可知,函數(shù)中定義的變量在函數(shù)內部可使用,但無法在函數(shù)外部使用。

局部變量的作用域僅限于定義它的代碼段內,在同一個作用域內,不允許出現(xiàn)同名的變量。


2.全局變量

全局變量是指在函數(shù)之外定義的變量,它在程序的整個運行周期內都占用存儲單元。默認情況下,函數(shù)的內部只能獲取全局變量,而不能修改全局變量的值。例如,將前面定義的test()函數(shù)進行調整,如下所示:

count - 10            #全局變量
def test():
count=11              #實際上定義了局部變量,局部變量與全局變量重名
print (count)
test ()
print(count)

以上代碼中首先在test()函數(shù)外定義了一個全局變量count,其次在該函數(shù)的內部嘗試為count 重新賦值,然后在函數(shù)的內部訪問了變量count,最后在執(zhí)行完函數(shù)后訪問變量count。

執(zhí)行程序,程序執(zhí)行的結果如下:

11
10

從以上結果可知,程序在函數(shù)test()內部訪問的變量count為11,函數(shù)外部訪問的變量為10。也就是說,函數(shù)的內部并沒有修改全局變量的值,而是定義了一個與全局變量同名的局部變量。

在函數(shù)內部若要修改全局變量的值,需要提前使用保留字global進行聲明,語法格式如下:

global 全局變量

對以上定義的test()兩數(shù)再次進行調整,在該函數(shù)中對全局變量count進行修改,具體代碼如下所示:

count = 10                                #全局變量
def test ():
global count                              #聲明count為全局變量
count += 10                               #函數(shù)內修改count 變量
print(count)
test()
print(count)
以上代碼首先定義了變量count并賦值為10,其次在test()函數(shù)內部使用global保留字聲明count為全局變量,然后重新給count 變量賦值并將其輸出,最后在函數(shù)執(zhí)行完以后再次輸出。

執(zhí)行程序,程序執(zhí)行的結果如下:

20
20

觀察執(zhí)行結果,程序在函數(shù)內部和外部獲得的變量count的值均為20。由此可知,在函數(shù)內部使用關鍵字global對全局變量進行聲明后,函數(shù)中對全局變量進行的修改在整個程序中都有效。


LEGB法則:

Python中的作用城大致可以分為以下4種。

(1)L(local):局部作用域。

(2)E(enclosing):嵌套作用域fo

(3)G(global):全局作用域。

(4)B(built-in):內置作用域。

基于LEGB法則,搜索變量名的優(yōu)先級是:局部作用域>嵌套作用域>全局作用域>內置作用域。當函數(shù)中使用了未確定的變量名時,Python會按照優(yōu)先級依次搜索4個作用域,以此來確定該變量名的意義。首先搜索局部作用域(L),其次是上一層函數(shù)的嵌套作用域(E),然后是全局作用域(G),最后是內置作用域(B)。接照LEGB原則查找變量,在某個區(qū)拔內若找到變量,則停止繼續(xù)查找;若一直沒有找到變量,則直接引發(fā)NameError異常。






猜你喜歡:

在Postman中如何設置全局變量和環(huán)境變量?

postman全局變量和環(huán)境變量分別是什么?有什么區(qū)別?

Nginx rewrite常用全局變量詳細介紹

黑馬程序員Python+大數(shù)據(jù)開發(fā)開發(fā)工程師培訓

分享到:
在線咨詢 我要報名
和我們在線交談!