Python函數(shù)命名空間和作用域(Local與Global)
摘要:
Python函數(shù)是一個包裝起來的代碼塊,通過前面的返回函數(shù),閉包函數(shù)等課程,我們發(fā)現(xiàn)其內(nèi)部變量定義在不同的位置,使用起來的效果就有所不同,這就是python函數(shù)的作用域和命名空間。
1.Local作用域
a = 100
def func5():
? ? b = 50
? ? a = 99
? ? print('函數(shù)內(nèi)a', a)
? ? print('函數(shù)內(nèi)b', b)
print('函數(shù)外a', a)
func5()
print('函數(shù)外b', b)返回結(jié)果:
函數(shù)外a 100
函數(shù)內(nèi)a 99
函數(shù)內(nèi)b 50
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/python知識總結(jié)/2.python自學(xué)網(wǎng)-通用模塊-視頻源碼/test.py", line 12, in <module>
print('函數(shù)外b', b)
NameError: name 'b' is not defined
上面函數(shù)中定義b變量,所以外面無法輸出。
2.Enclosing function locals作用域
a = 100
def func5():
? ? b = 50
? ? print('函數(shù)內(nèi)a', a)
? ? print('函數(shù)內(nèi)b', b)
? ? def func6():
? ? ? ? print('下層函數(shù)內(nèi)a', a)
? ? ? ? print('下層函數(shù)內(nèi)b', b)
? ? func6()
func5()返回結(jié)果:
函數(shù)內(nèi)a 100
函數(shù)內(nèi)b 50
下層函數(shù)內(nèi)a 100
下層函數(shù)內(nèi)b 50
3.Global全局變量
a = 123 def func(): ? ? a = 100 ? ? print(a) print(a) func() print(a) a = 123 def func(): ? ? global a ?# 這里不能使用nonlocal ? ? a = 100 ? ? print(a) ? ? print(locals()) ?# 查看局部變量 ? ? print(globals()) ?# 查看全局變量 print(a) func() print(a)
4.非局部變量nonlocal
def func5(): ? ? b = 50 ? ? print(b) ? ? def func6(): ? ? ? ? nonlocal b ?# 非局部的,只適用于閉包內(nèi)部 ? ? ? ? b = 60 ? ? ? ? print(b) ? ? func6() ? ? print(b) func5()
5.就近原則
b = 1111 def func5(): ? ? b = 50 ? ? print(b) ? ? def func6(): ? ? ? ? b = 60 ? ? ? ? print(b) ?# 這里的b從內(nèi)到外究竟查找 ? ? func6() ? ? print(b) func5() a = 100 def func5(): ? ? b = 50 ? ? print(a) ? ? print(b) ? ? def func6(): ? ? ? ? b = 60 ? ? ? ? print(b) ? ? ? ? print(a) func5()
6.函數(shù)執(zhí)行順序
a = 123 def func1(): ? ? print(a) ? ? print(b) func1() ?# 不能打印b b = 456 func1() ?# 可以打印b
7.循環(huán)、判斷代碼塊中作用域問題
if True: ? ? a = 100 print(a) for i in range(1, 10): ? ? print(i) print(i)
循環(huán)代碼塊中沒有作用域這樣的情況。
到此這篇關(guān)于Python函數(shù)命名空間和作用域(Local與Global)的文章就介紹到這了,更多相關(guān)Python命名空間和作用域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python錯誤:AttributeError: ''module'' object has no attribute
這篇文章主要介紹了python錯誤:AttributeError: 'module' object has no attribute 'setdefaultencoding'問題的解決方法,需要的朋友可以參考下2014-08-08
Python 創(chuàng)建守護(hù)進(jìn)程的示例
這篇文章主要介紹了Python 創(chuàng)建守護(hù)進(jìn)程的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-09-09
python 服務(wù)器運行代碼報錯ModuleNotFoundError的解決辦法
這篇文章主要介紹了python 服務(wù)器運行代碼報錯ModuleNotFoundError的解決辦法,幫助大家排除錯誤,正確的運行代碼,感興趣的朋友可以了解下2020-09-09
python使用mediapiple+opencv識別視頻人臉的實現(xiàn)
本文主要介紹了python使用mediapiple+opencv識別視頻人臉,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
python3.x+pyqt5實現(xiàn)主窗口狀態(tài)欄里(嵌入)顯示進(jìn)度條功能
這篇文章主要介紹了python3.x+pyqt5實現(xiàn)主窗口狀態(tài)欄里(嵌入)顯示進(jìn)度條功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
在Python程序中實現(xiàn)分布式進(jìn)程的教程
這篇文章主要介紹了在Python程序中實現(xiàn)分布式進(jìn)程的教程,在多進(jìn)程編程中十分有用,示例代碼基于Python2.x版本,需要的朋友可以參考下2015-04-04
Python基于Google?Bard實現(xiàn)交互式聊天機(jī)器人
這篇文章主要為大家介紹了Python基于Google?Bard實現(xiàn)交互式聊天機(jī)器人示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

