
1、Python中數(shù)據(jù)類型
1、整數(shù)
Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù),在Python程序中,整數(shù)的表示方法和數(shù)學(xué)上的寫(xiě)法一模一樣,例如:1,100,-8080,0,等等。
計(jì)算機(jī)由于使用二進(jìn)制,所以,有時(shí)候用十六進(jìn)制表示整數(shù)比較方便,十六進(jìn)制用0x前綴和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
2、浮點(diǎn)數(shù)
浮點(diǎn)數(shù)也就是小數(shù),之所以稱為浮點(diǎn)數(shù),是因?yàn)榘凑湛茖W(xué)記數(shù)法表示時(shí),一個(gè)浮點(diǎn)數(shù)的小數(shù)點(diǎn)位置是可變的,比如,1.23x109</sup>和12.3x10<sup>8是相等的。浮點(diǎn)數(shù)可以用數(shù)學(xué)寫(xiě)法,如1.23,3.14,-9.01,等等。但是對(duì)于很大或很小的浮點(diǎn)數(shù),就必須用科學(xué)計(jì)數(shù)法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以寫(xiě)成1.2e-5,等等。
整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部存儲(chǔ)的方式是不同的,整數(shù)運(yùn)算永遠(yuǎn)是精確的(除法難道也是精確的?是的?。?,而浮點(diǎn)數(shù)運(yùn)算則可能會(huì)有四舍五入的誤差。
3、字符串
字符串是以''或""括起來(lái)的任意文本,比如'abc',"xyz"等等。請(qǐng)注意,''或""本身只是一種表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c這3個(gè)字符。
4、布爾值
布爾值和布爾代數(shù)的表示完全一致,一個(gè)布爾值只有True、False兩種值,要么是True,要么是False,在Python中,可以直接用True、False表示布爾值(請(qǐng)注意大小寫(xiě)),也可以通過(guò)布爾運(yùn)算計(jì)算出來(lái)。
布爾值可以用and、or和not運(yùn)算。
and運(yùn)算是與運(yùn)算,只有所有都為 True,and運(yùn)算結(jié)果才是 True。
or運(yùn)算是或運(yùn)算,只要其中有一個(gè)為 True,or 運(yùn)算結(jié)果就是 True。
not運(yùn)算是非運(yùn)算,它是一個(gè)單目運(yùn)算符,把 True 變成 False,F(xiàn)alse 變成 True。
5、空值
空值是Python里一個(gè)特殊的值,用None表示。None不能理解為0,因?yàn)?是有意義的,而None是一個(gè)特殊的空值。
此外,Python還提供了列表、字典等多種數(shù)據(jù)類型,還允許創(chuàng)建自定義數(shù)據(jù)類型,我們后面會(huì)繼續(xù)講到
小任務(wù)
計(jì)算十進(jìn)制整數(shù) 45678 和十六進(jìn)制整數(shù) 0x12fd2 之和。
請(qǐng)用字符串表示出Learn Python in geekxz。
-
請(qǐng)計(jì)算以下表達(dá)式的布爾值(注意==表示判斷是否相等):
100 < 99
0xff == 255
注意:使用print命令
2、Python之print語(yǔ)句
print語(yǔ)句可以向屏幕上輸出指定的文字。比如輸出'hello, world',用代碼實(shí)現(xiàn)如下:
print 'hello, world'
注意:
1.當(dāng)我們?cè)赑ython交互式環(huán)境下編寫(xiě)代碼時(shí),>>>是Python解釋器的提示符,不是代碼的一部分。
2.當(dāng)我們?cè)谖谋揪庉嬈髦芯帉?xiě)代碼時(shí),千萬(wàn)不要自己添加 >>>。
print語(yǔ)句也可以跟上多個(gè)字符串,用逗號(hào)“,”隔開(kāi),就可以連成一串輸出:
print 'The quick brown fox', 'jumps over', 'the lazy dog'
The quick brown fox jumps over the lazy dog
print會(huì)依次打印每個(gè)字符串,遇到逗號(hào)“,”會(huì)輸出一個(gè)空格,因此,輸出的字符串是這樣拼起來(lái)的:
print也可以打印整數(shù),或者計(jì)算結(jié)果:
>>> print 200200 #運(yùn)行結(jié)果>>> print 100 + 200200 #運(yùn)行結(jié)果
因此,我們可以把計(jì)算100 + 100的結(jié)果打印得更漂亮一點(diǎn):
>>> print '100 + 100 =', 100 + 100100 + 100 = 200 #運(yùn)行結(jié)果
注意: 對(duì)于100 + 100,Python解釋器自動(dòng)計(jì)算出結(jié)果200,但是,'100 + 100 ='是字符串而非數(shù)學(xué)公式,Python把它視為字符串,請(qǐng)自行解釋上述打印結(jié)果。
小任務(wù)
1.請(qǐng)用兩種方式打印出 hello, python。
2.自行練習(xí)加減。
3、Python的注釋
任何時(shí)候,我們都可以給程序加上注釋。注釋是用來(lái)說(shuō)明代碼的,給自己或別人看,而程序運(yùn)行的時(shí)候,Python解釋器會(huì)直接忽略掉注釋,所以,有沒(méi)有注釋不影響程序的執(zhí)行結(jié)果,但是影響到別人能不能看懂你的代碼。
Python的注釋以#開(kāi)頭,后面的文字直到行尾都算注釋
# 這一行全部都是注釋...
print 'hello' # 這也是注釋
注釋還有一個(gè)巧妙的用途,就是一些代碼我們不想運(yùn)行,但又不想刪除,就可以用注釋暫時(shí)屏蔽掉:
# 暫時(shí)不想運(yùn)行下面一行代碼:
# print 'hello, python.'
4、Python中什么是變量
在Python中,變量的概念基本上和初中代數(shù)的方程變量是一致的。
例如,對(duì)于方程式 y=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è)變量名表示,變量名必須是大小寫(xiě)英文、數(shù)字和下劃線(_)的組合,且不能用數(shù)字開(kāi)頭,比如:
a = 1
變量a是一個(gè)整數(shù)。
t_007 = 'T007'
變量t_007是一個(gè)字符串。
在Python中,等號(hào)=是賦值語(yǔ)句,可以把任意數(shù)據(jù)類型賦值給變量,同一個(gè)變量可以反復(fù)賦值,而且可以是不同類型的變量,例如:
a = 123 # a是整數(shù)print aa = 'imooc' # a變?yōu)樽址畃rint 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 = "mooc"; // 錯(cuò)誤:不能把字符串賦給整型變量
和靜態(tài)語(yǔ)言相比,動(dòng)態(tài)語(yǔ)言更靈活,就是這個(gè)原因。
請(qǐng)不要把賦值語(yǔ)句的等號(hào)等同于數(shù)學(xué)的等號(hào)。比如下面的代碼:
x = 10x = 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)我們寫(xiě):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 = aa = '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'了。
5、Python中定義字符串
前面我們講解了什么是字符串。字符串可以用''或者""括起來(lái)表示。
如果字符串本身包含'怎么辦?比如我們要表示字符串I'm OK,這時(shí),可以用" "括起來(lái)表示:
"I'm OK"
類似的,如果字符串包含",我們就可以用' '括起來(lái)表示:
'Learn "Python" in geekxz'
如果字符串既包含'又包含"怎么辦?
這個(gè)時(shí)候,就需要對(duì)字符串的某些特殊字符進(jìn)行“轉(zhuǎn)義”,Python字符串用\進(jìn)行轉(zhuǎn)義。
要表示字符串 Bob said "I'm OK".
由于 ' 和 " 會(huì)引起歧義,因此,我們?cè)谒懊娌迦胍粋€(gè)\表示這是一個(gè)普通字符,不代表字符串的起始,因此,這個(gè)字符串又可以表示為
'Bob said \"I\'m OK\".'
注意:轉(zhuǎn)義字符 \ 不計(jì)入字符串的內(nèi)容中。
常用的轉(zhuǎn)義字符還有:
\n 表示換行
\t 表示一個(gè)制表符
\\ 表示 \ 字符本身
小任務(wù):自我檢測(cè)
1.請(qǐng)將下面兩行內(nèi)容用Python的字符串表示并打印出來(lái):
Python was started in 1989 by "Guido".
Python is free and easy to learn.
6 Python中raw字符串與多行字符串
如果一個(gè)字符串包含很多需要轉(zhuǎn)義的字符,對(duì)每一個(gè)字符都進(jìn)行轉(zhuǎn)義會(huì)很麻煩。為了避免這種情況,我們可以在字符串前面加個(gè)前綴 r ,表示這是一個(gè) raw 字符串,里面的字符就不需要轉(zhuǎn)義了。例如:
r'\(~_~)/ \(~_~)/'
但是r'...'表示法不能表示多行字符串,也不能表示包含'和 "的字符串(為什么?)
如果要表示多行字符串,可以用'''...'''表示:
'''Line 1
Line 2
Line 3'''
上面這個(gè)字符串的表示方法和下面的是完全一樣的:
'Line 1\nLine 2\nLine 3'
還可以在多行字符串前面添加 r ,把這個(gè)多行字符串也變成一個(gè)raw字符串:
r'''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in geekxz!'''
小任務(wù):自我檢測(cè)
1.請(qǐng)自我練習(xí)使用串用r'''...'''的形式輸出文字,并用print打印出來(lái)
7、Python中Unicode字符串
因?yàn)橛?jì)算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte),所以,一個(gè)字節(jié)能表示的最大的整數(shù)就是255(二進(jìn)制11111111=十進(jìn)制255),0 - 255被用來(lái)表示大小寫(xiě)英文字母、數(shù)字和一些符號(hào),這個(gè)編碼表被稱為ASCII編碼,比如大寫(xiě)字母 A 的編碼是65,小寫(xiě)字母 z 的編碼是122。
如果要表示中文,顯然一個(gè)字節(jié)是不夠的,至少需要兩個(gè)字節(jié),而且還不能和ASCII編碼沖突,所以,中國(guó)制定了GB2312編碼,用來(lái)把中文編進(jìn)去。
類似的,日文和韓文等其他語(yǔ)言也有這個(gè)問(wèn)題。為了統(tǒng)一所有文字的編碼,Unicode應(yīng)運(yùn)而生。Unicode把所有語(yǔ)言都統(tǒng)一到一套編碼里,這樣就不會(huì)再有亂碼問(wèn)題了。
Unicode通常用兩個(gè)字節(jié)表示一個(gè)字符,原有的英文編碼從單字節(jié)變成雙字節(jié),只需要把高字節(jié)全部填為0就可以。
因?yàn)镻ython的誕生比Unicode標(biāo)準(zhǔn)發(fā)布的時(shí)間還要早,所以最早的Python只支持ASCII編碼,普通的字符串'ABC'在Python內(nèi)部都是ASCII編碼的。
Python在后來(lái)添加了對(duì)Unicode的支持,以Unicode表示的字符串用u'...'表示,比如:
print u'中文'
中文
注意: 不加 u ,中文就不能正常顯示。
Unicode字符串除了多了一個(gè) u 之外,與普通字符串沒(méi)啥區(qū)別,轉(zhuǎn)義字符和多行表示法仍然有效:
轉(zhuǎn)義:
u'中文\n日文\n韓文'
多行:
u'''第一行
第二行'''
raw+多行:
ur'''Python的Unicode字符串支持"中文",
"日文",
"韓文"等多種語(yǔ)言'''
如果中文字符串在Python環(huán)境下遇到 UnicodeDecodeError,這是因?yàn)?py文件保存的格式有問(wèn)題??梢栽诘谝恍刑砑幼⑨?/p>
# -*- coding: utf-8 -*-
目的是告訴Python解釋器,用UTF-8編碼讀取源代碼。然后用Notepad++ 另存為... 并選擇UTF-8格式保存。
小任務(wù):自我檢測(cè)
1.用多行Unicode字符串表示下面的唐詩(shī)并打印:
靜夜思
床前明月光,
疑是地上霜。
舉頭望明月,
低頭思故鄉(xiāng)。
8、Python中整型和浮點(diǎn)數(shù)
Python支持對(duì)整數(shù)和浮點(diǎn)數(shù)直接進(jìn)行四則混合運(yùn)算,運(yùn)算規(guī)則和數(shù)學(xué)上的四則運(yùn)算規(guī)則完全一致。
基本的運(yùn)算:
1 + 2 + 3 # ==> 64 * 5 - 6 # ==> 147.5 / 8 + 2.1 # ==> 3.0375
使用括號(hào)可以提升優(yōu)先級(jí),這和數(shù)學(xué)運(yùn)算完全一致,注意只能使用小括號(hào),但是括號(hào)可以嵌套很多層:
(1 + 2) * 3 # ==> 9(2.2 + 3.3) / (1.5 * (9 - 0.3)) # ==> 0.42145593869731807
和數(shù)學(xué)運(yùn)算不同的地方是,Python的整數(shù)運(yùn)算結(jié)果仍然是整數(shù),浮點(diǎn)數(shù)運(yùn)算結(jié)果仍然是浮點(diǎn)數(shù):
1 + 2 # ==> 整數(shù) 31.0 + 2.0 # ==> 浮點(diǎn)數(shù) 3.0
但是整數(shù)和浮點(diǎn)數(shù)混合運(yùn)算的結(jié)果就變成浮點(diǎn)數(shù)了:
1 + 2.0 # ==> 浮點(diǎn)數(shù) 3.0
為什么要區(qū)分整數(shù)運(yùn)算和浮點(diǎn)數(shù)運(yùn)算呢?這是因?yàn)檎麛?shù)運(yùn)算的結(jié)果永遠(yuǎn)是精確的,而浮點(diǎn)數(shù)運(yùn)算的結(jié)果不一定精確,因?yàn)橛?jì)算機(jī)內(nèi)存再大,也無(wú)法精確表示出無(wú)限循環(huán)小數(shù),比如 0.1 換成二進(jìn)制表示就是無(wú)限循環(huán)小數(shù)。
那整數(shù)的除法運(yùn)算遇到除不盡的時(shí)候,結(jié)果難道不是浮點(diǎn)數(shù)嗎?我們來(lái)試一下:
11 / 4 # ==> 2
令很多初學(xué)者驚訝的是,Python的整數(shù)除法,即使除不盡,結(jié)果仍然是整數(shù),余數(shù)直接被扔掉。不過(guò),Python提供了一個(gè)求余的運(yùn)算 % 可以計(jì)算余數(shù):
11 % 4 # ==> 3
如果我們要計(jì)算 11 / 4 的精確結(jié)果,按照“整數(shù)和浮點(diǎn)數(shù)混合運(yùn)算的結(jié)果是浮點(diǎn)數(shù)”的法則,把兩個(gè)數(shù)中的一個(gè)變成浮點(diǎn)數(shù)再運(yùn)算就沒(méi)問(wèn)題了:
11.0 / 4 # ==> 2.75
小任務(wù):自我檢測(cè)
1.自我練習(xí)小學(xué)生加減乘除法。
9、Python中布爾類型
我們已經(jīng)了解了Python支持布爾類型的數(shù)據(jù),布爾類型只有True和False兩種值,但是布爾類型有以下幾種運(yùn)算:
與運(yùn)算:只有兩個(gè)布爾值都為 True 時(shí),計(jì)算結(jié)果才為 True。
True and True # ==> True
True and False # ==> False
False and True # ==> False
False and False # ==> False
或運(yùn)算:只要有一個(gè)布爾值為 True,計(jì)算結(jié)果就是 True。
True or True # ==> True
True or False # ==> True
False or True # ==> True
False or False # ==> False
非運(yùn)算:把True變?yōu)镕alse,或者把False變?yōu)門(mén)rue:
not True # ==> False
not False # ==> True
布爾運(yùn)算在計(jì)算機(jī)中用來(lái)做條件判斷,根據(jù)計(jì)算結(jié)果為T(mén)rue或者False,計(jì)算機(jī)可以自動(dòng)執(zhí)行不同的后續(xù)代碼。
在Python中,布爾類型還可以與其他數(shù)據(jù)類型做 and、or和not運(yùn)算,請(qǐng)看下面的代碼:
a = True
print a and 'a=T' or 'a=F'
計(jì)算結(jié)果不是布爾類型,而是字符串 'a=T',這是為什么呢?
因?yàn)镻ython把0、空字符串''和None看成 False,其他數(shù)值和非空字符串都看成 True,所以:
True and 'a=T' 計(jì)算結(jié)果是 'a=T'
繼續(xù)計(jì)算 'a=T' or 'a=F' 計(jì)算結(jié)果還是 'a=T'
要解釋上述結(jié)果,又涉及到 and 和 or 運(yùn)算的一條重要法則****:短路計(jì)算。
- 在計(jì)算
a and b時(shí),如果 a 是 False,則根據(jù)與運(yùn)算法則,整個(gè)結(jié)果必定為 False,因此返回 a;如果 a 是 True,則整個(gè)計(jì)算結(jié)果必定取決與 b,因此返回 b。
2. 在計(jì)算 a or b 時(shí),如果 a 是 True,則根據(jù)或運(yùn)算法則,整個(gè)計(jì)算結(jié)果必定為 True,因此返回 a;如果 a 是 False,則整個(gè)計(jì)算結(jié)果必定取決于 b,因此返回 b。
所以Python解釋器在做布爾運(yùn)算時(shí),只要能提前確定計(jì)算結(jié)果,它就不會(huì)往后算了,直接返回結(jié)果。
如果需要Python安裝包歡迎關(guān)注 【極客小寨】微信公眾號(hào),回復(fù)Python安裝包!獲取下載地址。本課程會(huì)持續(xù)更新,歡迎關(guān)注一起成長(zhǎng),謝謝!