1.關(guān)于字符串:字符串用單引號(hào)或雙引號(hào)括住,但當(dāng)字符串里有單引號(hào)時(shí)芝薇,外面用雙引號(hào)括住彼妻,如果字符串里既有單引號(hào)也有雙引號(hào),那就要用轉(zhuǎn)義字符啦~舉個(gè)例子:I'm "OK" !>>>>>' I\'m \"OK\" ! '
2.關(guān)于轉(zhuǎn)義字符:順便再寫(xiě)一寫(xiě)常用的轉(zhuǎn)義字符:\n表示換行杆故,\t表示制表符迅箩,字符\本身也要轉(zhuǎn)義,所以\\表示的字符就是\处铛,可以在Python的交互式命令行用print()打印字符串看看
>>>print('I\'m ok.')
I'm ok.
>>> print('I\'m learning\nPython.')I'm learning
Python.
>>> print('\\\n\\')
\
\
如果字符串里面有很多字符都需要轉(zhuǎn)義饲趋,就需要加很多\拐揭,為了簡(jiǎn)化,Python還允許用r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義
如果字符串內(nèi)部有很多換行奕塑,用\n寫(xiě)在一行里不好閱讀堂污,為了簡(jiǎn)化,Python允許用'''...'''的格式表示多行內(nèi)容(這個(gè)是在交互式命令行中這樣寫(xiě)龄砰,提示符由>>>變?yōu)?..盟猖,提示你可以接著上一行輸入,注意...是提示符换棚,不是代碼的一部分)
編輯器程序保存成.py文件的可以這么寫(xiě):
print('''line1
line2
line3''')
3.關(guān)于變量和常量:(1)python是動(dòng)態(tài)語(yǔ)言式镐,比如執(zhí)行一個(gè)賦值語(yǔ)句:a = 'ABC'。Python解釋器干了兩件事情:第一在內(nèi)存中創(chuàng)建了一個(gè)'ABC'的字符串固蚤;第二在內(nèi)存中創(chuàng)建了一個(gè)名為a的變量娘汞,并把它指向'ABC'。
(2)在Python中夕玩,通常用全部大寫(xiě)的變量名表示常量价说。PI =3.14159265359
但事實(shí)上PI仍然是一個(gè)變量,Python根本沒(méi)有任何機(jī)制保證PI不會(huì)被改變风秤,所以鳖目,用全部大寫(xiě)的變量名表示常量只是一個(gè)習(xí)慣上的用法,如果你一定要改變變量PI的值缤弦,也沒(méi)人能攔住你领迈。
(3)除法是精確的,在Python中碍沐,有兩種除法狸捅,一種除法是/:>>> 10/3??? 3.3333333333333335????????????? /除法計(jì)算結(jié)果是浮點(diǎn)數(shù),即使是兩個(gè)整數(shù)恰好整除累提,結(jié)果也是浮點(diǎn)數(shù):>>> 9/3??? 3.0????????????????????????????? 還有一種除法是//尘喝,稱為地板除,兩個(gè)整數(shù)的除法仍然是整數(shù):>>>10// 3???? 3?????????????????????????????????????????? 整數(shù)的地板除//永遠(yuǎn)是整數(shù)斋陪,即使除不盡朽褪。要做精確的除法,使用/就可以无虚。因?yàn)?/除法只取結(jié)果的整數(shù)部分缔赠,所以Python還提供一個(gè)余數(shù)運(yùn)算,可以得到兩個(gè)整數(shù)相除的余數(shù):>>> 10%3?? 1?????????????????????????????? 無(wú)論整數(shù)做//除法還是取余數(shù)友题,結(jié)果永遠(yuǎn)是整數(shù)嗤堰,所以,整數(shù)運(yùn)算結(jié)果永遠(yuǎn)是精確的度宦。
4.關(guān)于字符串編碼:因?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),如果要表示更大的整數(shù)男娄,就必須用更多的字節(jié)行贪。比如兩個(gè)字節(jié)可以表示的最大整數(shù)是65535,4個(gè)字節(jié)可以表示的最大整數(shù)是4294967295模闲。
由于計(jì)算機(jī)是美國(guó)人發(fā)明的建瘫,因此,最早只有127個(gè)字符被編碼到計(jì)算機(jī)里尸折,也就是大小寫(xiě)英文字母啰脚、數(shù)字和一些符號(hào),這個(gè)編碼表被稱為ASCII編碼实夹,比如大寫(xiě)字母A的編碼是65橄浓,小寫(xiě)字母z的編碼是122。
但是要處理中文顯然一個(gè)字節(jié)是不夠的亮航,至少需要兩個(gè)字節(jié)荸实,而且還不能和ASCII編碼沖突,所以缴淋,中國(guó)制定了GB2312編碼准给,用來(lái)把中文編進(jìn)去。你可以想得到的是重抖,全世界有上百種語(yǔ)言露氮,日本把日文編到Shift_JIS里,韓國(guó)把韓文編到Euc-kr里钟沛,各國(guó)有各國(guó)的標(biāo)準(zhǔn)畔规,就會(huì)不可避免地出現(xiàn)沖突,結(jié)果就是恨统,在多語(yǔ)言混合的文本中叁扫,顯示出來(lái)會(huì)有亂碼。
因此延欠,Unicode應(yīng)運(yùn)而生陌兑。Unicode把所有語(yǔ)言都統(tǒng)一到一套編碼里沈跨,這樣就不會(huì)再有亂碼問(wèn)題了由捎。Unicode標(biāo)準(zhǔn)也在不斷發(fā)展,但最常用的是用兩個(gè)字節(jié)表示一個(gè)字符(如果要用到非常偏僻的字符饿凛,就需要4個(gè)字節(jié))∧辏現(xiàn)代操作系統(tǒng)和大多數(shù)編程語(yǔ)言都直接支持Unicode
現(xiàn)在软驰,捋一捋ASCII編碼和Unicode編碼的區(qū)別:ASCII編碼是1個(gè)字節(jié),而Unicode編碼通常是2個(gè)字節(jié)心肪。字母A用ASCII編碼是十進(jìn)制的65锭亏,二進(jìn)制的01000001;
字符0用ASCII編碼是十進(jìn)制的48硬鞍,二進(jìn)制的00110000慧瘤,注意字符'0'和整數(shù)0是不同的;
漢字中已經(jīng)超出了ASCII編碼的范圍固该,用Unicode編碼是十進(jìn)制的20013锅减,二進(jìn)制的01001110 00101101。你可以猜測(cè)伐坏,如果把ASCII編碼的A用Unicode編碼怔匣,只需要在前面補(bǔ)0就可以,因此桦沉,A的Unicode編碼是00000000 01000001每瞒。
新的問(wèn)題又出現(xiàn)了:如果統(tǒng)一成Unicode編碼,亂碼問(wèn)題從此消失了纯露。但是剿骨,如果你寫(xiě)的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲(chǔ)空間埠褪,在存儲(chǔ)和傳輸上就十分不劃算懦砂。
所以,本著節(jié)約的精神组橄,又出現(xiàn)了把Unicode編碼轉(zhuǎn)化為“可變長(zhǎng)編碼”的UTF-8編碼鱼炒。UTF-8編碼把一個(gè)Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個(gè)字節(jié),常用的英文字母被編碼成1個(gè)字節(jié)线梗,漢字通常是3個(gè)字節(jié)汁胆,只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址癜啵肬TF-8編碼就能節(jié)省空間:
從上圖還可以發(fā)現(xiàn)屠升,UTF-8編碼有一個(gè)額外的好處,就是ASCII編碼實(shí)際上可以被看成是UTF-8編碼的一部分狭郑,所以腹暖,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作,總結(jié)一下現(xiàn)在計(jì)算機(jī)系統(tǒng)通用的字符編碼工作方式:在計(jì)算機(jī)內(nèi)存中翰萨,統(tǒng)一使用Unicode編碼脏答,當(dāng)需要保存到硬盤(pán)或者需要傳輸?shù)臅r(shí)候,就轉(zhuǎn)換為UTF-8編碼。
(1)用記事本編輯的時(shí)候殖告,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里阿蝶,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件
(2)瀏覽網(wǎng)頁(yè)的時(shí)候黄绩,服務(wù)器會(huì)把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器
5.關(guān)于格式化輸出:
(1)在Python中羡洁,采用的格式化方式和C語(yǔ)言是一致的,用%實(shí)現(xiàn)
如果你不太確定應(yīng)該用什么爽丹,%s永遠(yuǎn)起作用筑煮,它會(huì)把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串。有些時(shí)候粤蝎,字符串里面的%是一個(gè)普通字符怎么辦咆瘟?這個(gè)時(shí)候就需要轉(zhuǎn)義,用%%來(lái)表示一個(gè)%诽里。
(2)format方法
它會(huì)用傳入的參數(shù)依次替換字符串內(nèi)的占位符{0}袒餐、{1}……,不過(guò)這種方式寫(xiě)起來(lái)比%要麻煩得多:
>>> 'Hello, {0}, 成績(jī)提升了 {1:.1f}%'.format('小明',17.125)'
Hello, 小明, 成績(jī)提升了 17.1%'
6.list and tuple
關(guān)于list這種可變的有序表谤狡,索引可以從后面開(kāi)始灸眼,比如list[-1],代表的就是列表里最后一個(gè)元素墓懂。
append()方法是在列表末尾加元素焰宣;insert(i,element)方法中i是索引,element是要添加的元素捕仔;pop()是刪除列表里最后一個(gè)元素匕积,pop(i)刪除對(duì)應(yīng)索引出的元素;要把某個(gè)元素替換成別的元素榜跌,可以直接賦值給對(duì)應(yīng)的索引位置闪唆。列表里的元素可以還是一個(gè)列表,類似多維數(shù)組取值钓葫。
關(guān)于tuple定長(zhǎng)的有序列表悄蕾,安全性高。有一點(diǎn)要注意础浮,就是定一個(gè)有一個(gè)元素的元組帆调,要寫(xiě)成>>> t = (1,)不能寫(xiě)成>>> t = (1),這是為什么呢豆同?
答:t=(1)定義的不是tuple番刊,是1這個(gè)數(shù)!這是因?yàn)槔ㄌ?hào)()既可以表示tuple影锈,又可以表示數(shù)學(xué)公式中的小括號(hào)芹务,這就產(chǎn)生了歧義蝉绷,因此,Python規(guī)定锄禽,這種情況下潜必,按小括號(hào)進(jìn)行計(jì)算靴姿,計(jì)算結(jié)果自然是1沃但。所以我們要在1后面加上逗號(hào)來(lái)消除歧義。
tuple定義之后佛吓,就不可變宵晚。但這里面有個(gè)誤區(qū),確切地說(shuō)應(yīng)該是tuple的每個(gè)元素指向永遠(yuǎn)不變维雇。但如果tuple某個(gè)元素是可變的list淤刃,這個(gè)list本身是可變的!如下面這個(gè)例子:
>>> t = ('a','b', ['A','B'])
>>> t[2][0] ='X'
>>> t[2][1] ='Y'
>>> t
('a','b', ['X','Y'])
7.關(guān)于條件判斷
if判斷條件還可以簡(jiǎn)寫(xiě)吱型,比如寫(xiě):
if x:
??? print('True')
只要x是非零數(shù)值逸贾、非空字符串、非空l(shuí)ist等津滞,就判斷為T(mén)rue铝侵,否則為False。
break語(yǔ)句可以在循環(huán)過(guò)程中直接退出循環(huán)触徐,而continue語(yǔ)句可以提前結(jié)束本輪循環(huán)咪鲜,并直接開(kāi)始下一輪循環(huán)。這兩個(gè)語(yǔ)句通常都必須配合if語(yǔ)句使用撞鹉。
要特別注意疟丙,不要濫用break和continue語(yǔ)句。break和continue會(huì)造成代碼執(zhí)行邏輯分叉過(guò)多鸟雏,容易出錯(cuò)享郊。大多數(shù)循環(huán)并不需要用到break和continue語(yǔ)句,上面的兩個(gè)例子孝鹊,都可以通過(guò)改寫(xiě)循環(huán)條件或者修改循環(huán)邏輯拂蝎,去掉break和continue語(yǔ)句。
8.dict and set
dict的鍵值對(duì)形式惶室,pop(key)方法對(duì)應(yīng)的value也會(huì)從dict刪除温自。要避免key不存在,兩種方法:
(1)通過(guò)in來(lái)判斷key是否存在
(2)get()方法皇钞,如果key不存在悼泌,返回None,或者自己指定value夹界。注意:返回None的時(shí)候Python的交互環(huán)境不顯示結(jié)果馆里。
>>> d.get('Thomas', -1)??????
-1????????????????????
和list比較,dict有以下幾個(gè)特點(diǎn):1.查找和插入的速度極快,不會(huì)隨著key的增加而變慢鸠踪;2.需要占用大量的內(nèi)存丙者,內(nèi)存浪費(fèi)多。而list相反:1.查找和插入的時(shí)間隨著元素的增加而增加营密;2.占用空間小械媒,浪費(fèi)內(nèi)存很少。所以评汰,dict是用空間來(lái)?yè)Q取時(shí)間的一種方法纷捞。
需要牢記的第一條就是dict的key必須是不可變對(duì)象。
set和dict類似被去,也是一組key的集合主儡,但不存儲(chǔ)value。由于key不能重復(fù)惨缆,所以糜值,在set中,沒(méi)有重復(fù)的key并且里面元素是無(wú)序的坯墨。有add(key)和remove(key)方法添加和刪除元素寂汇。
set可以看成數(shù)學(xué)意義上的無(wú)序和無(wú)重復(fù)元素的集合,因此畅蹂,兩個(gè)set可以做數(shù)學(xué)意義上的交集健无、并集等操作:
>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
>>> s1 & s2
{2,3}
>>> s1 | s2
{1,2,3,4}
9.再議不可變對(duì)象
首先我們知道str是不可變對(duì)象,list是可變對(duì)象液斜,對(duì)于可變對(duì)象比如list進(jìn)行操作累贤,list內(nèi)部?jī)?nèi)容是會(huì)變化的。而對(duì)不可變的對(duì)象比如str了少漆?看下面的代碼:
>>> a ='abc'
>>> b = a.replace('a','A')
>>> b
'Abc'
>>> a
'abc'
解釋:a是變量臼膏,'abc'是字符串對(duì)象,a本身是變量示损,他指向的內(nèi)容是才是'abc':調(diào)用replace方法確實(shí)作用在字符串對(duì)象上渗磅,但卻沒(méi)有改變字符串‘a(chǎn)bc’內(nèi)容,相反replace創(chuàng)建了一個(gè)新字符串‘Abc’并返回检访。
所以始鱼,對(duì)于不變對(duì)象來(lái)說(shuō),調(diào)用對(duì)象自身的任意方法脆贵,也不會(huì)改變?cè)搶?duì)象自身的內(nèi)容医清。相反,這些方法會(huì)創(chuàng)建新的對(duì)象并返回卖氨,這樣会烙,就保證了不可變對(duì)象本身永遠(yuǎn)是不可變的负懦。