Python命名空間及作用域原理實(shí)例解析
Python命名空間和作用域
總結(jié)
emmm,這一塊講了2個(gè)內(nèi)容,一個(gè)是命名空間,一個(gè)是作用域。一個(gè)一個(gè)說(shuō)吧
命名空間
A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries
上邊這段是官方文檔定義的,簡(jiǎn)單來(lái)說(shuō)就是名字到對(duì)象的映射,我們知道,python的一切都是對(duì)象,你所定義的變量名其實(shí)只是個(gè)引用。這樣就好理解了。python的命名空間由python數(shù)據(jù)結(jié)構(gòu)字典實(shí)現(xiàn)。python的命名空間細(xì)分的話(huà)有三種。如圖所示。
這一部分沒(méi)什么好說(shuō)的,重要的是理解其概念
作用域
A scope is a textual region of a Python program where a namespace is directly accessible. 'Directly accessible' here means that an unqualified reference to a name attempts to find the name in the namespace.
由官方文檔可以看出,作用域就是可以直接訪(fǎng)問(wèn)的區(qū)域。就是全局到局部。這里舉個(gè)代碼例子就行了。
#demo.pyglobal_var=’haha’ #定義全局變量def tool(): local_var=’local’ #局部變量 print(local_var) #訪(fǎng)問(wèn)局部變量,可以訪(fǎng)問(wèn)print(global_var) #訪(fǎng)問(wèn)全局變量,可以訪(fǎng)問(wèn)print(local_var) #訪(fǎng)問(wèn)局部變量,找不到,無(wú)法訪(fǎng)問(wèn)
這一部分的驚喜知識(shí)是跟作用域有關(guān)的。學(xué)到了2個(gè)關(guān)鍵字global和nonlocal
global_var=’haha’ #定義全局變量def tool(): global_var=’22’ print(global_var)print(global_var) #訪(fǎng)問(wèn)全局變量,可以訪(fǎng)問(wèn)tool()
這段代碼輸出了2個(gè)global_var。輸出結(jié)果是不一樣的。tool函數(shù)里在局部修改了global_var的值,并不影響全局。此時(shí)如果你想影響全局,你就需要用到關(guān)鍵字global.
global_var=’haha’ #定義全局變量def tool(): global global_var global_var=’22’ print(global_var)tool()print(global_var)
這樣就好了。
nonlocal作用類(lèi)似,用來(lái)修改嵌套作用域的。
def tool(): var=1 def inner(): nonlocal var var=2 print(var) inner() print(var)tool()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python使用ctypes庫(kù)調(diào)用DLL動(dòng)態(tài)鏈接庫(kù)2. Python使用shutil模塊實(shí)現(xiàn)文件拷貝3. 初學(xué)者學(xué)習(xí)Python好還是Java好4. Python實(shí)現(xiàn)迪杰斯特拉算法過(guò)程解析5. python中sklearn的pipeline模塊實(shí)例詳解6. 詳解Python模塊化編程與裝飾器7. Python字符串函數(shù)strip()原理及用法詳解8. python裝飾器三種裝飾模式的簡(jiǎn)單分析9. Python如何進(jìn)行時(shí)間處理10. python web框架的總結(jié)
