搜尋
首頁後端開發Python教學詳解輕鬆搞定Python的作用域五個知識點

網路上關於python的作用域介紹有很多,那麼小編今天給大家分享的這篇文章是讓大家透過學習這5個知識點,可以輕鬆搞定Python的作用域,有需要的朋友們可以參考借鑒。

">

1、區塊級作用域

想想此時執行下面的程式會有輸出嗎?執行會成功嗎?

##區塊級作用域

if 1 == 1:
name = "lzl"

print(name)


for i in range( 10):
age = i

print(age)

我們先看下執行結果

C:/Users/L/PycharmProjects/s14/preview/ Day8/作用域/main.py
lzl
9

Process finished with exit code 0

程式碼執行成功,沒有問題;在Java/C#中,執行上面的程式碼會提示name,age沒有定義,而在Python中可以執行成功,這是因為在Python中是沒有區塊級作用域的,程式碼區塊裡的變量,外部可以調用,所以可運行成功;  

 2、局部作用域

回顧之前學過的知識,我們學函數的時候,函數是個單獨的作用域,Python中沒有塊級作用域,但是有局部作用域;看看下面的程式碼

#局部作用域

def func():
name = "lzl"

print(name)

執行這段程式碼,想想會不會有輸出? ", line 23, in

print(name)

NameError: name 'name' is not defined

運行報錯,我相信這個大家都能理解,name變數只在func()函數內部生效,所以在全域中是沒辦法呼叫的;對上面程式碼做個簡單調整,再看看結果如何?

#局部作用域

def func ():

name = "lzl"

func()   #執行函數
print(name)

對先前的程式碼新增了一句程式碼,在變數name列印之前,執行了一下函數,此時列印會不會有變化?域/main.py", line 23, in
print(name)

NameError: name 'name' is not defined

執行依然報錯,還是回到剛才那句話:即使執行了一下函數,name的作用域也只是在函數內部,外部依然無法進行呼叫;把前兩個知識點記住,接下來要開始放大招了


3、作用域鏈

對函數做下調整,看看下面的程式碼執行結果如何?

#作用域鏈

name = "lzl"

def f1():

name = "Eric"

def f2():

 name = "Snor"
 print(name)
f2()
f1()

學過函數,一定知道最後f1()執行完會輸出Snor;我們先記住一個概念,Python中有作用域鏈,變數會由內到外找,先去自己作用域去找,自己沒有再去上級去找,直到找不到報錯

4、終極版作用域

好,鋪墊了夠了,終極版的來了~~

#終極版作用域

name = "lzl"

def f1( ):

print(name)


def f2():
name = "eric"
f1()

f2()
##想想最後f2()執行結果是印「lzl」呢,還是印「eric」?記住自己的答案,現在先不把答案貼出來,先看看下面這段程式碼:

#終極版作用域

name = "lzl"

# def f1():

print(name)

def f2():
name = "eric"
return f1

ret = f2()
ret()

#輸出:lzl

執行結果為“lzl”,分析下上面的程式碼,f2()執行結果為函數f1的記憶體位址,即ret=f1;執行ret()等同於執行f1() ,執行f1()時與f2()沒有任何關係,name=「lzl」與f1()在一個作用域鏈,函數內部沒有變數是會向外找,所以此時變數name值為「lzl」;理解了這個,那麼剛才沒給答案的那個終極程式碼你也知道答案了

#終極版作用域

name = "lzl"

def f1():

print(name)

def f2():
name = "eric"
f1()

f2 ()

# 輸出:lzl

是的,輸出的是“lzl”,記住在函數未執行之前,作用域已經形成了,作用域鏈也生成了

5、新浪面試題

li = [lambda :x for x in range(10)]

判斷下li的型別? li裡面的元素為什麼類型?

print(type(li))
print(type(li[0]))

#
#

可以看到li為列表類型,list裡面的元素為函數,那麼列印list裡面第一個元素的回傳值,此時回傳值為多少?

#lambada 面試題

li = [lambda :x for x in range(10)]

res = li[0]()
print(res )

#輸出:9

li第一個函數的回傳值為9還不是0,記住:函數在沒有執行前,內部程式碼不執行;部落格裡面的程式碼可以自己練練,加深下印象

總結

以上就是這篇文章的全部內容了,不知道對大家的學習和工作能不能帶來一些幫助,如果大家有疑問可以留言交流。

以上是詳解輕鬆搞定Python的作用域五個知識點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您如何將元素附加到Python數組?您如何將元素附加到Python數組?Apr 30, 2025 am 12:19 AM

Inpython,YouAppendElementStoAlistusingTheAppend()方法。 1)useappend()forsingleelements:my_list.append(4).2)useextend()orextend()或= formultiplelements:my_list.extend.extend(emote_list)ormy_list = [4,5,6] .3)useInsert()forspefificpositions:my_list.insert(1,5).beaware

您如何調試與Shebang有關的問題?您如何調試與Shebang有關的問題?Apr 30, 2025 am 12:17 AM

調試shebang問題的方法包括:1.檢查shebang行確保是腳本首行且無前置空格;2.驗證解釋器路徑是否正確;3.直接調用解釋器運行腳本以隔離shebang問題;4.使用strace或truss跟踪系統調用;5.檢查環境變量對shebang的影響。

如何從python數組中刪除元素?如何從python數組中刪除元素?Apr 30, 2025 am 12:16 AM

pythonlistscanbemanipulationusseveralmethodstoremovelements:1)theremove()MethodRemovestHefirStocCurrenceOfAstePecificiedValue.2)thepop()thepop()methodRemovesandReturnturnturnturnsanaNelementAgivenIndex.3)

可以在Python列表中存儲哪些數據類型?可以在Python列表中存儲哪些數據類型?Apr 30, 2025 am 12:07 AM

pythonlistscanstoreanydatate型,包括素,弦,浮子,布爾人,其他列表和迪克尼亞式

在Python列表上可以執行哪些常見操作?在Python列表上可以執行哪些常見操作?Apr 30, 2025 am 12:01 AM

pythristssupportnumeroferations:1)addingElementSwithAppend(),Extend(),andInsert()。 2)emovingItemSusingRemove(),pop(),andclear(),and clear()。 3)訪問andModifyingandmodifyingwithIndexingandSlicing.4)

如何使用numpy創建多維數組?如何使用numpy創建多維數組?Apr 29, 2025 am 12:27 AM

使用NumPy創建多維數組可以通過以下步驟實現:1)使用numpy.array()函數創建數組,例如np.array([[1,2,3],[4,5,6]])創建2D數組;2)使用np.zeros(),np.ones(),np.random.random()等函數創建特定值填充的數組;3)理解數組的shape和size屬性,確保子數組長度一致,避免錯誤;4)使用np.reshape()函數改變數組形狀;5)注意內存使用,確保代碼清晰高效。

說明Numpy陣列中'廣播”的概念。說明Numpy陣列中'廣播”的概念。Apr 29, 2025 am 12:23 AM

播放innumpyisamethodtoperformoperationsonArraySofDifferentsHapesbyAutapityallate AligningThem.itSimplifififiesCode,增強可讀性,和Boostsperformance.Shere'shore'showitworks:1)較小的ArraySaraySaraysAraySaraySaraySaraySarePaddedDedWiteWithOnestOmatchDimentions.2)

說明如何在列表,Array.Array和用於數據存儲的Numpy數組之間進行選擇。說明如何在列表,Array.Array和用於數據存儲的Numpy數組之間進行選擇。Apr 29, 2025 am 12:20 AM

forpythondataTastorage,choselistsforflexibilityWithMixedDatatypes,array.ArrayFormeMory-effficityHomogeneousnumericalData,andnumpyArraysForAdvancedNumericalComputing.listsareversareversareversareversArversatilebutlessEbutlesseftlesseftlesseftlessforefforefforefforefforefforefforefforefforefforlargenumerdataSets; arrayoffray.array.array.array.array.array.ersersamiddreddregro

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境