Python中的嵌套作用域是指函數中定義的函數可以訪問外層函數的變量,但這些變量不屬于全局命名空間。嵌套作用域有助于保護變量不被誤修改或污染全局變量。
def outer_func(): num = 5 # 外層變量 def inner_func(): nonlocal num # 申明num來自于外層函數 num += 1 # 修改外層變量 print(num) inner_func() # 調用內層函數 outer_func() # 輸出6
在上面的例子中,內層函數`inner_func`可以訪問外層函數`outer_func`中定義的變量`num`。使用`nonlocal`關鍵字來申明變量來自于外層函數,然后對該變量進行修改。
Python中如果在內層函數中對外層變量進行賦值操作,則會創建一個新的同名變量,這個變量只存在于內層函數的命名空間中,外層函數的變量值不改變。如果想在內層函數中修改外層函數中的變量,需要使用`nonlocal`關鍵字。
def outer_func(): num = 5 # 外層變量 def inner_func(): num = 2 # 在內層函數中定義了一個同名變量 print(num) # 輸出2 inner_func() # 調用內層函數 print(num) # 輸出5,外層變量值未發生變化 outer_func()
上面的例子中,`inner_func`函數中定義了一個同名變量`num`,該變量只在內層函數中存在,外層函數中的變量值還是5,未發生變化。
在實際開發中,嵌套作用域可以提高代碼的可維護性和可擴展性,使得代碼更加模塊化和封裝化。