一、局部變數的概念
在函數內部定義的變數稱為局部變數,只能在函數內部使用。局部變數的生命周期和函數相同,函數執行結束後,變數也就銷毀了。
def test():
var = "局部變數"
print(var)
test()
執行結果為:
局部變數
在函數內部,我們定義了一個名為var的變數,並將其值設定為”局部變數”,隨後我們又在函數內將變數輸出。輸出結果說明了我們的局部變數是起效的。
二、局部變數的作用域
作用域決定了局部變數的訪問許可權。Python中的作用域分為四種:
- Local:局部變數的作用域為函數內部,在函數外部無法訪問這些變數
- Enclosing:在嵌套函數中引用變數,如下面的例子
- Global:全局變數的作用域為整個Python模塊,在模塊內引用變數時都能訪問該變數
- Built-in: Python內置變數的作用域是Python內置模塊中的所有函數
Enclosing作用域的例子
def outer():
x = "outer function"
def inner():
y = "inner function"
print(x)
print(y)
inner()
outer()
輸出結果為:
outer function
inner function
分析一下這個例子,我們定義了一個名為outer的函數,並在函數內定義了一個x變數。然後在函數內部,我們再定義了一個inner函數,並在其中定義了一個y變數,隨後我們輸出了x和y。由輸出結果可知,在inner函數內部,它可以訪問到outer函數內部定義的x變數,因為outer就是inner的Enclosing作用域。
三、函數中變數的生命周期
函數是Python中常見的代碼塊結構,變數的生命周期和函數密切相關,一旦函數退出,其內部所定義局部變數也隨之消失,這就決定了在函數中定義的變數與外部變數的訪問許可權。
def test():
var = "函數內的局部變數"
print(var)
test()
print(var) # 錯誤代碼
這個例子中,我們定義了test函數,並在函數內部定義了一個var局部變數,執行函數後會輸出它的值。但是在函數外部,我們不能再訪問這個變數了,因為它的作用域只在函數內部。因此在函數外嘗試輸出var值,Python解釋器會報錯。
四、全局變數和局部變數的區別
全局變數和局部變數有一個根本的區別,局部變數在函數執行結束後就會銷毀。因此,在Python中為了避免變數污染,我們常常使用局部變數去代替全局變數。全局變數在程序的各個部分中都能使用,通常聲明在函數的外部或者在模塊頂層。
使用局部變數:
n = 10 # 全局變數
def add(m):
global n
n += m # 修改全局變數n
print(n)
add(5)
這個例子中,我們定義了一個全局變數n,並在add函數中修改了n的值,由於n是全局變數,所以在函數執行結束後,n的值並沒有被銷毀,而是繼續存在。
使用全局變數和局部變數:
n = 10 # 全局變數
def add(m):
n = 1 # 局部變數,與全局變數n不一樣
n += m # 修改局部變數n
print(n)
add(5)
print(n)
執行結果為:
6
10
從代碼和執行結果可知,我們在add函數中定義了一個名為n的局部變數,並給它賦值為1,而不是使用全局變數n。在函數執行結束後,全局變數n的值並沒有改變。
五、函數參數的傳遞方式
Python中函數參數有兩種傳遞方式:值傳遞和引用傳遞。
值傳遞:
def func(a):
a = 10
print(a)
b = 20
func(b)
print(b)
執行結果為:
10
20
可以看到,儘管函數內部修改了a的值,但是在函數外部b的值並沒有改變,所以b是值傳遞。
引用傳遞:
def func(lst):
lst[0] = 100
print(lst)
lst = [1, 2, 3]
func(lst)
print(lst)
執行結果為:
[100, 2, 3]
[100, 2, 3]
我們在函數內部修改了lst的值,在函數外部輸出lst值時,它已經被修改了。因此,lst是引用傳遞。
六、小結
本文主要從局部變數的概念和作用域、函數中變數的生命周期、全局變數和局部變數的區別、函數參數的傳遞方式等多個方面來詳細闡述了Python中局部變數的定義與使用。局部變數作為函數內部的變數,其作用域只在函數內部有效,因此使用它能避免變數污染。在使用過程中,應該注意全局變數和局部變數的區別,以及函數參數的傳遞方式。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/188776.html