程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python函數的變量作用域

編輯:Python

所謂作用域(Scope),就是變量的有效范圍,就是變量可以在哪個范圍以內使用。有些變量可以在整段代碼的任意位置使用,有些變量只能在函數內部使用,有些變量只能在 for 循環內部使用。

變量的作用域由變量的定義位置決定,在不同位置定義的變量,它的作用域是不一樣的。本節我們只講解兩種變量,局部變量和全局變量。

Python局部變量

在函數內部定義的變量,它的作用域也僅限於函數內部,出了函數就不能使用了,我們將這樣的變量稱為局部變量(Local Variable)。

要知道,當函數被執行時,Python 會為其分配一塊臨時的存儲空間,所有在函數內部定義的變量,都會存儲在這塊空間中。而在函數執行完畢後,這塊臨時存儲空間隨即會被釋放並回收,該空間中存儲的變量自然也就無法再被使用。
如果試圖在函數外部訪問其內部定義的變量,Python 解釋器會報 NameError 錯誤,並提示我們沒有定義要訪問的變量,這也證實了當函數執行完畢後,其內部定義的變量會被銷毀並回收。
值得一提的是,函數的參數也屬於局部變量,只能在函數內部使用。

Python全局變量

除了在函數內部定義變量,Python 還允許在所有函數的外部定義變量,這樣的變量稱為全局變量(Global Variable)。

和局部變量不同,全局變量的默認作用域是整個程序,即全局變量既可以在各個函數的外部使用,也可以在各函數內部使用。

獲取指定作用域范圍中的變量

在一些特定場景中,我們可能需要獲取某個作用域內(全局范圍內或者局部范圍內)所有的變量,Python 提供了以下 3 種方式:

1) globals()函數

globals() 函數為 Python 的內置函數,它可以返回一個包含全局范圍內所有變量的字典,該字典中的每個鍵值對,鍵為變量名,值為該變量的值。
注意,globals() 函數返回的字典中,會默認包含有很多變量,這些都是 Python 主程序內置的,讀者暫時不用理會它們。

通過調用 globals() 函數,我們可以得到一個包含所有全局變量的字典。並且,通過該字典,我們還可以訪問指定變量,甚至如果需要,還可以修改它的值。

2) locals()函數

locals() 函數也是 Python 內置函數之一,通過調用該函數,我們可以得到一個包含當前作用域內所有變量的字典。這裡所謂的“當前作用域”指的是,在函數內部調用 locals() 函數,會獲得包含所有局部變量的字典;而在全局范文內調用 locals() 函數,其功能和 globals() 函數相同。

當使用 locals() 函數獲取所有全局變量時,和 globals() 函數一樣,其返回的字典中會默認包含有很多變量,這些都是 Python 主程序內置的。


注意,當使用 locals() 函數獲得所有局部變量組成的字典時,可以向 globals() 函數那樣,通過指定鍵訪問對應的變量值,但無法對變量值做修改。

顯然,locals() 返回的局部變量組成的字典,可以用來訪問變量,但無法修改變量的值。

3) vars(object)

vars() 函數也是 Python 內置函數,其功能是返回一個指定 object 對象范圍內所有變量組成的字典。如果不傳入object 參數,vars() 和 locals() 的作用完全相同。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved