globals()方法會(huì)以字典類(lèi)型返回當(dāng)前位置的全部全局變量。
符號(hào)表是由編譯器維護(hù)的數(shù)據(jù)結(jié)構(gòu),其中包含有關(guān)程序的所有必要信息。
這些包括變量名,方法,類(lèi)等。
符號(hào)表主要有兩種。
本地符號(hào)表
全局符號(hào)表
本地(Local)符號(hào)表存儲(chǔ)與程序的本地范圍有關(guān)的所有信息,并在Python中進(jìn)行可以使用locals()方法訪問(wèn)。
局部作用域可以在函數(shù)內(nèi),類(lèi)內(nèi)等。
同樣,全局(Global)符號(hào)表存儲(chǔ)了與程序的全局范圍有關(guān)的所有信息,并在Python中使用globals()方法進(jìn)行訪問(wèn)。
全局作用域包含所有函數(shù),與任何類(lèi)或函數(shù)都沒(méi)有關(guān)聯(lián)的變量。
推薦閱讀: Python的命名空間和作用域
globals表字典是當(dāng)前模塊的字典(在函數(shù)內(nèi)部,這是定義它的模塊,而不是調(diào)用它的模塊)。
globals()方法的語(yǔ)法為:
globals()
globals()方法不帶任何參數(shù)。
globals()方法返回全局變量的字典。
globals()
運(yùn)行該程序時(shí),輸出為:
{'In': ['', 'globals()'], 'Out': {}, '_': '', '__': '', '___': '', '__builtin__': <module 'builtins' (built-in)>, '__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', '_dh': ['/home/repl'], '_i': '', '_i1': 'globals()', '_ih': ['', 'globals()'], '_ii': '', '_iii': '', '_oh': {}, '_sh': <module 'IPython.core.shadowns' from '/usr/local/lib/python3.5/dist-packages/IPython/core/shadowns.py'>, 'exit': <IPython.core.autocall.ExitAutocall at 0x7fbc60ca6c50>, 'get_ipython': <bound method InteractiveShell.get_ipython of <IPython.core.interactiveshell.InteractiveShell object at 0x7fbc6478ee48>>, 'quit': <IPython.core.autocall.ExitAutocall at 0x7fbc60ca6c50>}
輸出顯示當(dāng)前程序的所有全局變量和其他符號(hào)。
age = 23 globals()['age'] = 25 print('年齡是:', age)
運(yùn)行該程序時(shí),輸出為:
年齡是: 25
這里,由于全局符號(hào)表還存儲(chǔ)所有全局變量,即在本示例中為age,所以可以使用globals()函數(shù)更改age的值。
使用變量age的鍵訪問(wèn)返回的字典,并將其修改為25。
這將再次反映到全局符號(hào)表中。