最近,我在群里答疑的時(shí)候,經(jīng)常碰到,小伙伴,再變量,縮進(jìn),參數(shù),方面使用錯(cuò)誤,導(dǎo)致程序運(yùn)行不來(lái)。
今天,打算自己寫(xiě)一篇。
Python 變量作用域,和生命周期。
徹底弄懂變量該怎么使用。
變量的使用,有作用域區(qū)別,也有生命周期的區(qū)別。
python能夠影響變量作用域的代碼段是def、class、lamda。
def scopeTest(): localValur = 6 print(localValur)scopeTest()# print(localValur) #去除注釋這里會(huì)報(bào)錯(cuò),因?yàn)閘ocalValur是本地變量
輸出結(jié)果:
6
去掉注釋的結(jié)果:
6Traceback (most recent call last): File "D:/PythonDemo/test--/cycleTest.py", line 6, in <module> print(localValur) #去除注釋這里會(huì)報(bào)錯(cuò),因?yàn)閘ocalValur是本地變量NameError: name "localValur" is not defined
if/elif/else、try/except/finally、for/while 并不能涉及變量作用域的更改,也就是說(shuō)他們的代碼塊中的變量,在外部也是可以訪問(wèn)的。
for i in range(3): localValur=i+1 passprint(i)print(localValur)
輸出結(jié)果:
23
變量搜索路徑是:本地變量->全局變量。
def scopeTest(): var = 6 print(var) # def innerFunc(): print(f"var:{var}") #注意這里 innerFunc()var = 5print(var)scopeTest()print(var)
輸出結(jié)果:
56var:65
①def函數(shù)里面的變量,不能和文件里面的變量共用
②def函數(shù)可以嵌套使用,并且內(nèi)部def函數(shù),可以使用外部def函數(shù)的變量。
在我們?cè)谖募饷娑x了一個(gè)變量,想通過(guò)函數(shù)操作是不是就沒(méi)辦法了?
value=100def scopeTest(): # global value value +=1print(value)scopeTest()print(value)
沒(méi)進(jìn)行聲明的時(shí)候,是這樣的輸出結(jié)果:
100Traceback (most recent call last): File "D:/PythonDemo/test--/cycleTest.py", line 8, in <module> scopeTest() File "D:/PythonDemo/test--/cycleTest.py", line 5, in scopeTest value +=1UnboundLocalError: local variable "value" referenced before assignment
去掉注釋:
value=100def scopeTest(): global value value +=1print(value)scopeTest()print(value)
這個(gè)時(shí)候,函數(shù)里面,修改的結(jié)果,也會(huì)影響到文件了,輸出結(jié)果:
100101
先看案例:
創(chuàng)建一個(gè)類,之后把類里面的index值改成有序值
class classTest: index=0 arr=[]add=classTestfor i in range(5): add.index=iarr.append(add)for cc in arr: print(cc.index)
輸出結(jié)果:
44444
為什么結(jié)果都會(huì)變成4?因?yàn)檫@里的變量add的數(shù)據(jù)類型是一個(gè)type類。
print(type(add))
<class "type">
數(shù)組里面的值是跟著 ‘type’ 對(duì)象改變的,add 的生命周期,從聲明起就一直沒(méi)有變化。
正確寫(xiě)法:
class classTest:index=0for i in range(5): add = classTest() print(type(add)) add.index=i arr.append(add)for cc in arr: print(cc.index)
顯示結(jié)果:
<class "__main__.classTest"><class "__main__.classTest"><class "__main__.classTest"><class "__main__.classTest"><class "__main__.classTest">01234
這個(gè)時(shí)候,我們的結(jié)果就正確了。add的生命周期,在每一次創(chuàng)建的時(shí)候,就是一個(gè)新變量。
知識(shí)點(diǎn)雖然少,但是他的重要性,無(wú)可替代,很多看似解決不了的錯(cuò)誤,依靠基礎(chǔ)知識(shí)都可以解決。
很多博主都在推薦功能的使用,我更強(qiáng)調(diào)基礎(chǔ)的訓(xùn)練。
推薦一本書(shū),確保基礎(chǔ)不掉隊(duì)。
鏈接:https://pan.baidu.com/s/1YllgwFf3aMbZLHeNyoLkUQ
提取碼:9vwh
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/121421.html
摘要:前言在開(kāi)發(fā)技術(shù)和應(yīng)用市場(chǎng)完全成熟的今天,有人希望深耕技術(shù)打造出自己的一片天地,也有人想廣泛學(xué)習(xí)在程序員市場(chǎng)中游刃有余。而這本書(shū)上千的引用論文,給我指明了一條系統(tǒng)學(xué)習(xí)理論的明路。 ...
?前言 代碼出現(xiàn)異常而報(bào)錯(cuò)再正常不過(guò)了,但為什么要處理異常? 由于異常的存在,代碼運(yùn)行時(shí)會(huì)出現(xiàn)一大堆的紅色字體提示,對(duì)于程序員還好,見(jiàn)紅色報(bào)錯(cuò)見(jiàn)多了習(xí)慣了,但如果你開(kāi)發(fā)出來(lái)的東西要給別人看,那么不懂代碼的人就會(huì)一臉懵逼,對(duì)產(chǎn)品的印象都不太好了。 比如我們經(jīng)常簡(jiǎn)單網(wǎng)頁(yè)丟失的情況,其實(shí)是就是網(wǎng)頁(yè)代碼執(zhí)行時(shí)發(fā)生了異常,但有的網(wǎng)頁(yè)還是很個(gè)性的,提示的信息可能是比較人性化的,比如CSDN你收藏的文章被后臺(tái)刪...
?前言 在Python寫(xiě)代碼做項(xiàng)目時(shí),我們往往需要對(duì)多個(gè)文件進(jìn)行操作,在現(xiàn)在的源代碼文件中怎么導(dǎo)入其他文件?怎么對(duì)其他文件進(jìn)行操作?這都是經(jīng)常要面臨的問(wèn)題,尤其是爬蟲(chóng),爬到的數(shù)據(jù)放在哪里?用到的時(shí)候怎么調(diào)出來(lái)? 這就涉及到了Python的文件操作知識(shí)了,我們不可能永遠(yuǎn)都只會(huì)在一個(gè)源文件上做所有的操作,這也是必須掌握的一個(gè)知識(shí)板塊。 與此同時(shí),我的Python新手入門教程系列文章也已經(jīng)快更新完了,歡...
摘要:標(biāo)簽不區(qū)分大小寫(xiě),但推薦小寫(xiě)。標(biāo)簽可以嵌套,但不能交叉嵌套。標(biāo)簽也稱為元素。比如行內(nèi)標(biāo)簽亦可成行內(nèi)元素。 ??HTML必備知識(shí)詳解?? 第一部分:HTML框架簡(jiǎn)介...
閱讀 3639·2021-11-24 09:38
閱讀 3142·2021-11-15 11:37
閱讀 780·2021-11-12 10:36
閱讀 3547·2021-10-21 09:38
閱讀 3220·2021-09-28 09:36
閱讀 2420·2021-09-22 16:01
閱讀 4984·2021-09-22 15:09
閱讀 1210·2019-08-30 15:55