了解Python作用域
作用域是指變量的有效范圍。對于自學(xué)者來說,如果已經(jīng)進(jìn)入了函數(shù)這一部分,那么就應(yīng)該了解Python的作用域。否則,你可能會像我一樣,總是對一個變量名在函數(shù)內(nèi)外同時存在且具有不同的值感到困惑。在這篇文章中
作用域是指變量的有效范圍。對于自學(xué)者來說,如果已經(jīng)進(jìn)入了函數(shù)這一部分,那么就應(yīng)該了解Python的作用域。否則,你可能會像我一樣,總是對一個變量名在函數(shù)內(nèi)外同時存在且具有不同的值感到困惑。在這篇文章中,我將總結(jié)我所了解到的作用域以及LEGB規(guī)則。
1. 全局作用域(Global)
當(dāng)我們創(chuàng)建一個文件時,就形成了一個模塊,這時候就產(chǎn)生了一個作用域。這個范圍是整個模塊,被稱為全局作用域。例如,在一個名為的文件中聲明一個變量bd"百度",那么變量bd就是一個全局變量。
```python
bd "百度"
if True:
print(bd) 輸出:百度
def function_1():
print(bd)
function_1()
```
在這個例子中,變量bd可以在函數(shù)內(nèi)和函數(shù)外被使用。
2. 局部作用域(Local)
當(dāng)函數(shù)被定義后,它就擁有了一個屬于自己的小天地,即局部作用域。在這個范圍內(nèi),可以定義變量,也可以在內(nèi)部嵌套函數(shù)。但是,局部作用域中的變量只能在局部范圍內(nèi)使用。
```python
def locals():
x 100
print("local_x ", x)
locals()
```
輸出結(jié)果:local_x 100
如果在全局范圍內(nèi)打印x,就會報(bào)錯:
```python
def locals():
x 100
print("local_x ", x)
print(x) 錯誤!NameError: name 'x' is not defined
locals()
```
因此,局部變量x只能在函數(shù)內(nèi)部使用,在其他地方調(diào)用時會出錯。
3. 嵌套作用域(Enclosed)
當(dāng)函數(shù)嵌套時,就會產(chǎn)生嵌套作用域,介于全局作用域和局部作用域之間。比如,一個函數(shù)嵌套了另一個函數(shù),那么被嵌套的函數(shù)就是內(nèi)部作用域,而嵌套函數(shù)的作用域就是嵌套范圍的作用域。如果有更多層的嵌套,就會有多個嵌套作用域。
```python
x 20
def local_out():
y 30
def local_in():
z 40
print("本地變量z:", z)
print("嵌套變量y:", y)
local_in()
print("全局變量x:", x)
local_out()
```
輸出結(jié)果:
全局變量x: 20
嵌套變量y: 30
本地變量z: 40
4. Python的內(nèi)建函數(shù)(Built-in)
內(nèi)建函數(shù)是Python中天生就有的函數(shù),無論在哪個作用域都可以直接調(diào)用。其中,最常用的莫過于print()函數(shù)。關(guān)于內(nèi)建函數(shù)的詳細(xì)信息,你可以在Python的文檔中找到。
通過理解Python的作用域,可以更好地掌握變量的使用范圍和生命周期,從而提高代碼的可讀性和可維護(hù)性。希望這篇文章對你有所幫助,讓你更好地理解Python作用域的概念。