變量的作用域指的是一個變量能夠有效的區(qū)域,因為我們在使用函數(shù)的時候,有的變量是在主程序中定義的,有的是在調(diào)用的函數(shù)中定義的,當(dāng)我們的主程序使用函數(shù)中定義的變量時,就會出現(xiàn)異常。下面來介紹一下局部變量和全局變量。
1. 局部變量
局部變量,顧名思義,就是作用在局部區(qū)域的變量,如果是在函數(shù)中定義的變量,那么就只在函數(shù)中起作用,如果在函數(shù)外部使用函數(shù)內(nèi)部的變量,就會出現(xiàn)異常。
看下面的例子:
def test(): data = '局部變量' print('在函數(shù)內(nèi)部輸出data為:',data) test() print('在主程序中輸出data:',data)
輸出結(jié)果為:
在函數(shù)內(nèi)部輸出data為: 局部變量 Traceback (most recent call last): File "C:/Users/輕煙/PycharmProjects/untitled/venv/Include/ts.py", line 6, in <module> print('在主程序中輸出data:',data) NameError: name 'data' is not defined
由于變量data是在函數(shù)內(nèi)部定義的,我們在主程序中使用變量data則會出現(xiàn)訪問的變量不存在的問題,所以我們要注意在函數(shù)內(nèi)部定義的變量為局部變量,未作特別聲明的話是不可以在函數(shù)外使用的。
2. 全局變量
全局變量我們也可以從字面意思中理解到它就是作用在全局的變量,有的同學(xué)可能自然而然的認(rèn)為那么全局變量一定是定義在主程序中的變量了,其實全局變量也是可以作用在函數(shù)中的,在這里我們來介紹兩種全局變量的使用方式:
1) 在主程序中定義全局變量
我們在主程序中定義的變量的作用域是全局的,我們在定義的函數(shù)中也是可以直接使用這些變量,看下面的例子:
data = '全局變量data' def test(): print('這是作用在函數(shù)中的全局變量:',data) test() print('這是作用在函數(shù)外的全局變量:',data)
輸出結(jié)果:
這是作用在函數(shù)中的全局變量: 全局變量data 這是作用在函數(shù)外的全局變量: 全局變量data
這種方式就是我們通常情況下使用的全局變量,我們在主程序中定義的變量可以在函數(shù)內(nèi)部直接的進行使用。
2) 使用global關(guān)鍵字
我們在函數(shù)內(nèi)定義的變量也可以編程全局變量,這時候我們就要使用到global關(guān)鍵字。
首先我們先看一下當(dāng)全局變量和局部變量的名字相同的時候會是一個怎么樣的情況,看下面的例子:
data = '這里是全局變量data' print(data) def test(): data = '這里是局部變量data' print(data) test() print('再檢查一下全局變量data:',data)
輸出結(jié)果為:
這里是全局變量data 這里是局部變量data 再檢查一下全局變量data: 這里是全局變量data
通過這里例子我們可以看出全局變量和局部變量的命名相同的時候是不影響全局變量的內(nèi)容的,但是如果我們想要在函數(shù)中修改全局變量的值,那么我們就要使用global關(guān)鍵字。
再看下面的例子:
data = '這里是全局變量data' print(data) def test(): global data data = '這里是局部變量data' print(data) test() print('再檢查一下全局變量data:',data)
輸出結(jié)果為:
這里是全局變量data 這里是局部變量data 再檢查一下全局變量data: 這里是局部變量data
通過global關(guān)鍵字,在局部中聲明告訴這個函數(shù)global是一個全局變量,那么修改了之后,全局中的變量都做了修改,global關(guān)鍵字就是可以使一個變量變成全局變量。
當(dāng)全局中沒有聲明變量的時候,我們在局部中也可以使用global關(guān)鍵字直接來聲明一個變量是全局變量,那么我們在函數(shù)中定義的變量在主程序中也是可以使用的,看下面的例子:
def test(): global data data = '這是在局部創(chuàng)建的變量data' print('這是在函數(shù)中輸出:',data) test() print('這是在主程序中輸出:',data)
輸出為:
這是在函數(shù)中輸出: 這是在局部創(chuàng)建的變量data 這是在主程序中輸出: 這是在局部創(chuàng)建的變量data
3. 總結(jié)
通過上面的例子我們可以了解到global關(guān)鍵字在控制全局變量時候的作用,另外要注意在寫程序的時候盡量避免全局變量和局部變量的名字一致,盡管他們作用于不同的區(qū)域,但是會影響對代碼的理解。本節(jié)就講到這里,下一節(jié)我們來學(xué)習(xí)匿名函數(shù)。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程