在Python中,變量的概念基本上和初中代數(shù)的方程變量是一致的破喻。
例如,對(duì)于方程式y(tǒng)=x*x曹质,x就是變量擎场。當(dāng)x=2時(shí)几莽,計(jì)算結(jié)果是4章蚣,當(dāng)x=5時(shí),計(jì)算結(jié)果是25究驴。
只是在計(jì)算機(jī)程序中,變量不僅可以是數(shù)字蝴韭,還可以是任意數(shù)據(jù)類型熙侍。
在Python程序中,變量是用一個(gè)變量名表示庆尘,變量名必須是大小寫英文巷送、數(shù)字和下劃線(_)的組合,且不能用數(shù)字開頭笑跛,比如:
a = 1
變量a是一個(gè)整數(shù)。
t_007 = 'T007'
變量t_007是一個(gè)字符串几苍。
在Python中陈哑,等號(hào)=是賦值語(yǔ)句,可以把任意數(shù)據(jù)類型賦值給變量刽宪,同一個(gè)變量可以反復(fù)賦值爬坑,而且可以是不同類型的變量,例如:
a = 123? ? # a是整數(shù)
print a
a = 'python'? # a變?yōu)樽址?/p>
print a
這種變量本身類型不固定的語(yǔ)言稱之為動(dòng)態(tài)語(yǔ)言售担,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言。
靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類型岩四,如果賦值的時(shí)候類型不匹配哥攘,就會(huì)報(bào)錯(cuò)。例如Java是靜態(tài)語(yǔ)言逝淹,賦值語(yǔ)句如下(// 表示注釋):
int a = 123; // a是整數(shù)類型變量
a = "java"; // 錯(cuò)誤:不能把字符串賦給整型變量
和靜態(tài)語(yǔ)言相比栅葡,動(dòng)態(tài)語(yǔ)言更靈活,就是這個(gè)原因欣簇。
請(qǐng)不要把賦值語(yǔ)句的等號(hào)等同于數(shù)學(xué)的等號(hào)。比如下面的代碼:
x = 10
x = x + 2
如果從數(shù)學(xué)上理解x = x + 2那無(wú)論如何是不成立的莫鸭,在程序中横殴,賦值語(yǔ)句先計(jì)算右側(cè)的表達(dá)式x + 2,得到結(jié)果12氏身,再賦給變量x惑畴。由于x之前的值是10航徙,重新賦值后,x的值變成12杠袱。
最后窝稿,理解變量在計(jì)算機(jī)內(nèi)存中的表示也非常重要。當(dāng)我們寫:a = 'ABC'時(shí)纹蝴,Python解釋器干了兩件事情:
1. 在內(nèi)存中創(chuàng)建了一個(gè)'ABC'的字符串;
2. 在內(nèi)存中創(chuàng)建了一個(gè)名為a的變量糠涛,并把它指向'ABC'兼犯。
也可以把一個(gè)變量a賦值給另一個(gè)變量b,這個(gè)操作實(shí)際上是把變量b指向變量a所指向的數(shù)據(jù)切黔,例如下面的代碼:
a = 'ABC'
b = a
a = 'XYZ'
print b
最后一行打印出變量b的內(nèi)容到底是'ABC'呢還是'XYZ'纬霞?如果從數(shù)學(xué)意義上理解,就會(huì)錯(cuò)誤地得出b和a相同险领,也應(yīng)該是'XYZ'绢陌,但實(shí)際上b的值是'ABC',讓我們一行一行地執(zhí)行代碼脐湾,就可以看到到底發(fā)生了什么事:
執(zhí)行a = 'ABC',解釋器創(chuàng)建了字符串 ?'ABC'和變量 a愁铺,并把a(bǔ)指向 'ABC':
執(zhí)行b = a茵乱,解釋器創(chuàng)建了變量 b孟岛,并把b指向 a 指向的字符串'ABC':
執(zhí)行a = 'XYZ',解釋器創(chuàng)建了字符串'XYZ'斤贰,并把a(bǔ)的指向改為'XYZ'次询,但b并沒(méi)有更改:
所以,最后打印變量b的結(jié)果自然是'ABC'了送巡。