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