python怎么訪問類中的局部變量 Python可用什么關(guān)鍵字來定義局部變量?
Python可用什么關(guān)鍵字來定義局部變量?python中的局部變量。;t不需要用關(guān)鍵字定義,只需要在本地代碼塊中定義變量。C語(yǔ)言程序中有全局變量和局部變量,函數(shù)內(nèi)部的局部變量作用范圍是整個(gè)函數(shù)嗎?謝謝
Python可用什么關(guān)鍵字來定義局部變量?
python中的局部變量。;t不需要用關(guān)鍵字定義,只需要在本地代碼塊中定義變量。
C語(yǔ)言程序中有全局變量和局部變量,函數(shù)內(nèi)部的局部變量作用范圍是整個(gè)函數(shù)嗎?
謝謝邀請(qǐng)我。
在開發(fā)一個(gè)C語(yǔ)言程序的過程中,如果能給變量取一個(gè)合適的名字,即使不寫額外的注釋,也能讓整個(gè)程序段一目了然。遺憾的是,有時(shí)候有用的名字會(huì)被其他變量占用,所以給變量命名是一件很頭疼的事情。
我經(jīng)常在我的同事 代碼,令人眼花繚亂。
局部變量的作用域是整個(gè)函數(shù)嗎?一般來說,C語(yǔ)言中的變量根據(jù)作用域的不同可以分為全局變量和局部變量。一般來說,函數(shù)中定義的變量稱為局部變量,非靜態(tài)的局部變量存在于函數(shù)的堆??蚣苤?。函數(shù)的堆棧幀在執(zhí)行后會(huì)被系統(tǒng)回收,此時(shí)局部變量會(huì)被自動(dòng)釋放,所以局部變量只在函數(shù)中有效。我相信即使是C語(yǔ)言初學(xué)者也能理解這一點(diǎn)。
但是我沒有。;不知道讀者有沒有想過這個(gè)問題:C語(yǔ)言函數(shù)中局部變量的作用域是整個(gè)函數(shù)嗎?比如變量size是在fun()函數(shù)中定義的,那么在fun()函數(shù)所屬的整個(gè)代碼段中是否可用?在回答這個(gè)問題之前,首先要明白,至少gcc 4 . 8 . 4版不再限制C語(yǔ)言函數(shù)定義變量必須在代碼段的開頭,也就是說下面的C語(yǔ)言代碼是合法的:
你可以在幾行語(yǔ)句后定義變量I。甚至像下面的C語(yǔ)言代碼,在if語(yǔ)句塊中定義變量大小是合法的。請(qǐng)看:
現(xiàn)在在C語(yǔ)言的main()函數(shù)返回之前增加一行size,即:
增加大小后編譯執(zhí)行C語(yǔ)言代碼會(huì)怎么樣?請(qǐng)看:
編譯失敗,提示第8行大小未聲明!那個(gè) 奇怪的是,size在上面的C語(yǔ)言代碼的第6行中有明確的說明。!這實(shí)際上回答了這個(gè)問題C語(yǔ)言函數(shù)中局部變量的作用域是整個(gè)函數(shù)嗎? "顯然,局部變量大小的范圍并不是整個(gè)函數(shù)。
我不 不知道有沒有朋友會(huì)認(rèn)為編譯失敗是因?yàn)闆]有執(zhí)行if語(yǔ)句,所以沒有執(zhí)行int size 30,所以沒有聲明大小。
既然局部變量的作用域不是整個(gè)函數(shù),那么它的作用域是什么呢?相信讀者已經(jīng)知道m(xù)ain、if、while等詞了。這些在C語(yǔ)言代碼中具有人類語(yǔ)言含義的代碼只是為了方便程序員,而計(jì)算機(jī)可以 我認(rèn)不出這些單詞。因此,如果你想執(zhí)行C語(yǔ)言程序,你需要 "翻譯 "代碼轉(zhuǎn)換成計(jì)算機(jī)知道的指令序列。
編譯器正在編譯C語(yǔ)言。在編碼的過程中,還要處理好變量的范圍。應(yīng)該理解的是 "全球 "和 "本地 "是相對(duì)的概念,所以編譯器需要定義一個(gè) "本地 "首先,這是一個(gè)很好的選擇{ } "符號(hào)作為一個(gè) "本地 "。
以上分析基于gcc版本4.8.4。
現(xiàn)在很清楚,局部變量的范圍是由 "{ } "而全局變量的作用域是由多個(gè) "{ } "。讓 讓我們?cè)賮砜纯瓷厦娴膯栴}。在main()函數(shù)中,第6行的size屬于if{}代碼塊,而第8行的size屬于main{}代碼塊。所以雖然它們同名,編譯器還是會(huì)認(rèn)為它們是不同的變量,編譯會(huì)給出錯(cuò)誤。
事實(shí)上,在C語(yǔ)言程序開發(fā)中,你只能使用 "{ } "進(jìn)行本地處理,如下面的代碼:
編譯執(zhí)行上述C語(yǔ)言代碼,結(jié)果如下:
顯然,由 amp包裝的C代碼段{ } "函數(shù)內(nèi)部不影響外部的大小,不用怕變量名被占用。
函數(shù)內(nèi)部的子代碼塊運(yùn)行后會(huì)釋放變量?jī)?nèi)存嗎?這個(gè)問題的答案其實(shí)上面已經(jīng)解釋過了。即使變量是函數(shù)內(nèi)部子代碼塊中的局部變量,也是存儲(chǔ)在函數(shù)的堆棧幀中,堆棧幀只有在整個(gè)函數(shù)運(yùn)行后才會(huì)被系統(tǒng)回收,所以函數(shù)內(nèi)部子代碼塊中局部變量占用的內(nèi)存在函數(shù)執(zhí)行后才會(huì)被釋放。
可以做以下實(shí)驗(yàn)。首先,在函數(shù)的子代碼塊外面定義一個(gè)大數(shù)組。相關(guān)的C語(yǔ)言代碼如下。請(qǐng)看:
編譯并執(zhí)行這段C代碼,然后使用top命令檢查程序占用的資源,如下所示:
編譯并執(zhí)行這段C代碼,然后使用top命令檢查程序占用的資源,如下所示:
It 一目了然。
綜上所述,C語(yǔ)言函數(shù)中局部變量的范圍有時(shí)并不是函數(shù)的全部,可以在一定程度上解決變量名被占用的問題。但需要注意的是,函數(shù)內(nèi)部子代碼塊中局部變量所占用的內(nèi)存,直到函數(shù)執(zhí)行后才會(huì)釋放。
歡迎在評(píng)論區(qū)一起討論提問。這些文章都是手工原創(chuàng)的。每天都有最簡(jiǎn)單的C語(yǔ)言、linux等嵌入式開發(fā)介紹。如果你喜歡我的文章,請(qǐng)關(guān)注一波。你可以看到最新的更新和以前的文章。