在 Python 中,每個變量都有一個定義它的作用域,這是指變量在程序中可見的范圍。作用域決定了在哪里可以訪問變量以及在何處可以更改它。在本文中,我們將介紹 Python 中的作用域規(guī)則以及如何在程序中使用它們。
全局作用域
在 Python 中,定義在最外層的變量屬于全局作用域。全局作用域包含了整個程序。如果我們定義一個變量在全局作用域內(nèi),那么它可以在程序的任何地方使用。
下面是一個例子:
x=5 defprint_x(): print(x) print_x()#輸出5
在這個例子中,變量 x 定義在程序的最外層,所以它屬于全局作用域。函數(shù) print_x() 可以訪問全局變量 x 并將其打印到控制臺上。
局部作用域
在 Python 中,每個函數(shù)都有自己的作用域,稱為局部作用域。局部作用域只包含定義在函數(shù)內(nèi)部的變量。這意味著函數(shù)外部定義的變量對于函數(shù)內(nèi)部是不可見的。
下面是一個例子:
defprint_x(): x=5 print(x) print_x()#輸出5 print(x)#NameError:name'x'isnotdefined
在這個例子中,變量 x 定義在 print_x() 函數(shù)內(nèi)部,所以它屬于局部作用域。這意味著它只能在函數(shù)內(nèi)部使用。如果我們嘗試在函數(shù)外部訪問變量 x,Python 將引發(fā) NameError 異常。
嵌套作用域
在 Python 中,函數(shù)可以嵌套在其他函數(shù)中。嵌套函數(shù)可以訪問其父函數(shù)的變量,這些變量屬于嵌套作用域。
下面是一個例子:
defouter(): x=5 definner(): print(x) inner() outer()#輸出5
在這個例子中,函數(shù) inner() 嵌套在函數(shù) outer() 中。函數(shù) inner() 可以訪問其父函數(shù) outer() 中定義的變量 x。這是因?yàn)樽兞?x 屬于嵌套作用域。
global 關(guān)鍵字
有時我們希望在函數(shù)內(nèi)部修改全局變量。為了實(shí)現(xiàn)這一點(diǎn),我們可以使用 global 關(guān)鍵字。
下面是一個例子:
x=5 defchange_x(): globalx x=10 print(x)#輸出5 change_x() print(x)#輸出10
在這個例子中,我們定義了一個全局變量 x,然后編寫了一個函數(shù) change_x(),它將全局變量 x 的值修改為 10。為了實(shí)現(xiàn)這一點(diǎn),我們在函數(shù)內(nèi)部使用 global 關(guān)鍵字來告訴 Python 我們希望修改全局變量 x 的值。
nonlocal 關(guān)鍵字
類似地,如果我們在一個嵌套函數(shù)中想要修改其父函數(shù)中的變量,可以使用 nonlocal 關(guān)鍵字。
下面是一個例子:
defouter(): x=5 definner(): nonlocalx x=10 inner() print(x)#輸出10
outer()
在這個例子中,我們定義了一個外部函數(shù) outer() 和一個嵌套函數(shù) inner()。變量 x 被定義在外部函數(shù) outer() 中。嵌套函數(shù) inner() 使用 nonlocal 關(guān)鍵字來告訴 Python 我們想要修改其父函數(shù) outer() 中的變量 x。
總結(jié)
Python 中有三種作用域:全局作用域、局部作用域和嵌套作用域。在函數(shù)內(nèi)部,我們可以使用 global 和 nonlocal 關(guān)鍵字來訪問和修改全局變量和父函數(shù)中的變量。了解作用域的概念和規(guī)則對于編寫清晰、可維護(hù)的 Python 代碼至關(guān)重要。
審核編輯:劉清
-
python
+關(guān)注
關(guān)注
56文章
4802瀏覽量
84885
原文標(biāo)題:網(wǎng)絡(luò)工程師學(xué)Python-15-作用域
文章出處:【微信號:網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號:網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論