Python:locals函數和globals函數介紹

來源:互聯網
上載者:User

Python有兩個內建的函數,locals() 和globals(),它們提供了基於字典的訪問局部和全域變數的方式。

首先,是關於名字空間的一個名詞解釋。是枯燥,但是很重要,所以要耐心些。Python使用叫做名字空間的東西來記錄變數的軌跡。名字空間只是一個 字典,它的鍵字就是變數名,字典的值就是那些變數的值。實際上,名字空間可以象Python的字典一樣進行訪問,一會我們就會看到。

在一個Python程式中的任何一個地方,都存在幾個可用的名字空間。每個函數都有著自已的名字空間,叫做局部名字空間,它記錄了函數的變數,包括 函數的參數和局部定義的變數。每個模組擁有它自已的名字空間,叫做全域名字空間,它記錄了模組的變數,包括函數、類、其它匯入的模組、模組層級的變數和常 量。還有就是內建名字空間,任何模組均可訪問它,它存放著內建的函數和異常。

當一行代碼要使用變數 x 的值時,Python會到所有可用的名字空間去尋找變數,按照如下順序:

  1. 局部名字空間 - 特指當前函數或類的方法。如果函數定義了一個局部變數 x,Python將使用這個變數,然後停止搜尋。
  2. 全域名字空間 - 特指當前的模組。如果模組定義了一個名為 x 的變數,函數或類,Python將使用這個變數然後停止搜尋。
  3. 內建名字空間 - 對每個模組都是全域的。作為最後的嘗試,Python將假設 x 是內建函數或變數。

如果Python在這些名字空間找不到 x,它將放棄尋找並引發一個 NameError 的異常,同時傳 遞 There is no variable named 'x' 這樣一條資訊

象Python中的許多事情一樣,名字空間在運行時直接可以訪問。特別地,局部名字空間可以通過內建的 locals 函數來訪問。全域(模組層級別)名字空間可以通過 globals 函數來訪問

locals 介紹

1

2

3

4

5

6

7

8

9

10

11

12
>>> def test(arg):
#函數 foo 在它的局部名字空間中有兩個變數:arg(它的值被傳入函數),和 z(它是在函數裡定義的)。

    z = 1

    print locals()
>>> test(4)
#locals 返回一個名字/值對的字典。這個字典的鍵字是字串形式的變數名字,字典的值是變數的實際值。
#所以用 4 來調用 foo,會列印出包含函數兩個局部變數的字典:arg (4) 和 z (1)。
{'z': 1, 'arg': 4}
>>> test('doulaixuexi')
#locals 可以用於所有類型的變數。
{'z': 1, 'arg': 'doulaixuexi'}
>>>

globals 介紹

1

2

3

4

5

6

7

8

9

10

11

12
>>> from sys import *
>>> print globals()
{'setrecursionlimit': <built-in function
setrecursionlimit>, 
'dont_write_bytecode': False, 
'getfilesystemencoding': <built-in function
getfilesystemencoding>, 
'long_info': sys.long_info(bits_per_digit=15, sizeof_digit=2), 
'stdout': <idlelib.rpc.RPCProxy object at 0x02110850>, 
'text': <function
text at 0x02111A70>, 
'meta_path': [], 
'exc_clear': <built-in function
exc_clear>, 
'prefix': 'C:\\Python27', 'getrefcount': <built-in function
getrefcount

......省略很多

可以發現globals 函數返回一個全域變數的字典,包括所有匯入的變數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.