溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

解開(kāi)動(dòng)態(tài)類型領(lǐng)域中 Python 的變量是什么?

發(fā)布時(shí)間:2020-04-10 09:37:56 來(lái)源:網(wǎng)絡(luò) 閱讀:226 作者:Python熱愛(ài)者 欄目:編程語(yǔ)言

寫這篇文章源自上次和一位讀者的交流,在給他回答問(wèn)題的時(shí)候我發(fā)現(xiàn)由于之前有學(xué)習(xí)?C?和?Java?這種靜態(tài)編譯類型語(yǔ)言的背景,使他在學(xué)習(xí)?Python?的時(shí)候還是會(huì)習(xí)慣用之前編程語(yǔ)言的思考去嘗試?yán)斫?Python,導(dǎo)致他有時(shí)候會(huì)覺(jué)得很困惑,這個(gè)直接表現(xiàn)在他對(duì)于很多概念的理解很混亂。

比如在?Python?中使用變量的時(shí)候不需要提前聲明變量及其類型,而且變量不會(huì)報(bào)錯(cuò),這在之前學(xué)習(xí)靜態(tài)語(yǔ)言的同學(xué)眼里是不可思議的,他們會(huì)有「這種情況下?Python?怎么知道變量是什么」等諸如此類的問(wèn)題,這樣的問(wèn)題其實(shí)已經(jīng)是進(jìn)入了「動(dòng)態(tài)類型」的領(lǐng)域了,Python?中類型是在程序運(yùn)行過(guò)程中自動(dòng)決定的。

因?yàn)槲抑耙彩亲?C?和?C++?出身,初次接觸?Python?的時(shí)候也會(huì)有這種不適感,所以我計(jì)劃接下來(lái)更新一些文章,寫一些像上面這樣大家在轉(zhuǎn)變上可能會(huì)困惑的地方,希望能給你帶來(lái)一些幫助。

變量、對(duì)象和引用

像在上面說(shuō)的,在?Python?中使用變量的時(shí)候不需要提前聲明變量及其類型,變量還是會(huì)正常工作。在?Python?中,這個(gè)是以一種非常流暢的方式完成,下面以?a?=?1?為例我們來(lái)看一下它到底是個(gè)什么情況。

首先是怎么知道創(chuàng)建了變量:對(duì)于變量?a,或者說(shuō)是變量名?a,當(dāng)程序第一次給它賦值的時(shí)候就創(chuàng)建了它,其實(shí)真實(shí)情況是?Python?在代碼運(yùn)行之前就先去檢測(cè)變量名,我們不去具體深究這些,你只需要當(dāng)作是「最開(kāi)始的賦值創(chuàng)建了變量」。

再者是怎么知道變量是什么類型:其實(shí)這個(gè)很多人都沒(méi)有搞清楚,「類型」這個(gè)概念不是存在于變量中,而是存在于對(duì)象中。變量本身就是通用的,它只是恰巧在某個(gè)時(shí)間點(diǎn)上引用了當(dāng)時(shí)的特定對(duì)象而已。就比如說(shuō)在表達(dá)式中,我們用的那個(gè)變量會(huì)立馬被它當(dāng)時(shí)所引用的特定對(duì)象所替代。

上面這個(gè)是動(dòng)態(tài)語(yǔ)言明顯區(qū)別于靜態(tài)語(yǔ)言的地方,其實(shí)對(duì)于剛開(kāi)始來(lái)說(shuō),如果你適應(yīng)將「變量」和「對(duì)象」分開(kāi),動(dòng)態(tài)類型你也就可以很容易理解了。

我們還是以?a?=?1?為例,其實(shí)從上面的講述中,我們很容易的可以發(fā)現(xiàn)對(duì)于?a?=?1?這個(gè)賦值語(yǔ)句?Python?是如何去執(zhí)行它的:創(chuàng)建一個(gè)代表值?1?的對(duì)象?-->?創(chuàng)建一個(gè)變量?a?-->?將變量?a?和對(duì)象?1?連接。?下面我用一個(gè)圖來(lái)更清晰的表示一下:

解開(kāi)動(dòng)態(tài)類型領(lǐng)域中 Python 的變量是什么?

由上圖我們可以看出,變量?a?其實(shí)變成了對(duì)象?1?的一個(gè)引用。如果你學(xué)過(guò)指針的話,你就會(huì)發(fā)現(xiàn)在內(nèi)部「變量其實(shí)就是到對(duì)象內(nèi)存空間的一個(gè)指針」。

同樣還是上圖,我們還可以看出在?Python?中「引用」是從變量到對(duì)象的連接,它就是一種關(guān)系,在內(nèi)存中以指針的形式實(shí)現(xiàn)。

寫在之后

所以總結(jié)一下,具體怎么來(lái)說(shuō)明?Python?中的變量、對(duì)象和引用:

變量是到內(nèi)存空間的一個(gè)指針,也就是擁有指向?qū)ο筮B接的空間;

對(duì)象是一塊內(nèi)存,表示它們所代表的值;

引用就是自動(dòng)形成的從變量到對(duì)象的指針。

當(dāng)然從技術(shù)的角度來(lái)講對(duì)于上面的表述可能會(huì)存在一些問(wèn)題,對(duì)象的結(jié)構(gòu)絕不只是單純的存值那么簡(jiǎn)單,但是對(duì)于剛?cè)腴T來(lái)講先這樣理解就足夠了,至于后續(xù)更深層次的探索等自己能力達(dá)到了可以嘗試去接觸。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI