該部分內容涉及 Python 變量作用域相關知識,變量作用域指的是變量的有效作用範圍,直接理解就是 Python 中的變量不是任意位置都可以訪問的,有限制條件。
壹般情況下變量的作用域變化範圍是 塊級、函數、類、模塊、包等,級別是從小到達。Python 中是沒有塊級作用域的,所以我們在寫代碼的時候,下面的代碼是正確的。
在 Python 中常見的塊級作用域有 if 語句、for 語句、while 語句、with 上下文語句。
上文已經提及了作用域是 Python 程序可以直接訪問壹個變量的作用範圍,Python 的作用域壹***有 4 種,分別如下:
壹個比較經典的案例如下:
在 Python 中變量尋找的順序是從內到外,先局部,然後外部,在全局,在內建,這種規則叫做 LEGB 規則 。
增加以下學習的趣味性,妳可以研究下述代碼中變量是如何變化的。
定義在 函數內部 的變量擁有壹個局部作用域,定義在 函數外部 的變量擁有全局作用域。
輸出結果,函數內部是 123 ,函數外部依舊是 0 。
如果希望函數內部(內部作用域)可以修改外部作用域的變量,需要使用 global 關鍵字。
此時輸出的就都是 123 了,還有壹點需要註意,在函數內容如果希望修改全局變量的值, global 關鍵字壹定要寫在變量操作前。
該代碼會出現語法錯誤:
全局變量還存在壹個面試真題,經常出現,請問下述代碼運行結果。
如果要修改嵌套作用域(Enclosing 作用域)中的變量,需要 nonlocal 關鍵字,測試代碼如下:
輸出結果自行測試,註意 nonlocal 關鍵字必須是 Python3.X+版本,Python 2.X 版本會出現語法錯誤:
在多重嵌套中, nonlocal 只會上溯壹層,如果上壹層沒有,則會繼續上溯,下述代碼妳可以分別註釋查看結果。
局部變量和全局變量具體有哪些,可以通過 locals() 和 globals() 兩個內置函數獲取。
本篇博客為大家說明了 Python 的作用域,並且對 global 和 nonlocal 關鍵字進行了學習,希望對妳有所幫助。