在Python中皿桑,變量的概念基本上和初中的方程式的變量是一致的毫目。
例如,y=x+1
,x
就是變量诲侮。當(dāng)x=2
時(shí)镀虐,計(jì)算出來(lái)的結(jié)果是3
,當(dāng)x=3
時(shí)沟绪,計(jì)算出來(lái)的結(jié)果是4
刮便。
只是在計(jì)算機(jī)程序中,變量 不僅僅是數(shù)字绽慈,還可以是任意數(shù)據(jù)類(lèi)型恨旱。
在Python程序中,變量是用一個(gè)變量名表示坝疼,變量名必須是大小寫(xiě)英文搜贤、數(shù)字和下劃線(_)的組合,且不能用數(shù)字開(kāi)頭钝凶,比如:
a=1
變量a
就是一個(gè)變量
t_007='T007'
變量t_007
是一個(gè)字符串
在Python中仪芒,等號(hào)=
是賦值語(yǔ)句,可以把任意數(shù)據(jù)類(lèi)型賦值給變量,同一變量可以反復(fù)賦值掂名,而且可以是不同類(lèi)型的變量据沈,比如:
a=3
print a #a是整數(shù)
a='abc'
print a #a是字符串
這種變量本身類(lèi)型不固定的語(yǔ)言稱(chēng)之為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言饺蔑。
靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類(lèi)型锌介,如果賦值的時(shí)候類(lèi)型不匹配,就會(huì)報(bào)錯(cuò)膀钠。例如Java是靜態(tài)語(yǔ)言掏湾,賦值語(yǔ)句如下(// 表示注釋?zhuān)?/p>
int a = 123; #a是整數(shù)類(lèi)型的變量
a='abc' #報(bào)錯(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)存中的表示也很重要惩坑。我們寫(xiě)a='abc'
時(shí),Python解釋器做了兩件事:
- 在內(nèi)存中創(chuàng)建了一個(gè)
'abc'
的字符串 - 在內(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
指向'ABC'
:
執(zhí)行````b = a`````,解釋器創(chuàng)建了變量
b
方妖,并把b
指向a
指向的字符串'ABC'
:執(zhí)行
a = 'XYZ'
狭魂,解釋器創(chuàng)建了字符串'XYZ'
,并把a
的指向改為'XYZ'
,但b
并沒(méi)有更改:所以雌澄,最后打印變量
b
的結(jié)果自然是'ABC'
了斋泄。