Python學(xué)習(xí)筆記(1):常用技巧

概念:

  • 面向過(guò)程:
    以指令為中心,由指令處理數(shù)據(jù)
    如何月組織代碼解決問(wèn)題
  • 面向?qū)ο?
    以數(shù)據(jù)為中心,所有的處理代碼都圍繞數(shù)據(jù)展開(kāi)
    如何設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)組織數(shù)據(jù),并提供對(duì)此類數(shù)據(jù)所允許操作
  • Python 既面向過(guò)程,也面向?qū)ο缶幊?Python中,一切皆為對(duì)象

Pycharm快捷鍵及操作命令

  • 注釋(取消注釋):CTRL+/
  • 批量縮進(jìn):TAB
  • 批量取消縮進(jìn):shift+TAB
  • 恢復(fù)操作:CTRL+Z
  • 查詢引用的庫(kù)內(nèi)置的方法(函數(shù)):dir(庫(kù)名)
  • 查詢一個(gè)變量的數(shù)據(jù)類型: type(變量名)
  • 求字符串、列表、元組梨睁、集合、字典長(zhǎng)度(元素個(gè)數(shù)):len(字符串名等)

求商取整

(商舍去小數(shù)只取整數(shù)),用雙斜杠,即雙除//,對(duì)比:

9//2=4
9/2=4.5

/除出來(lái)的結(jié)果為浮點(diǎn)

10/5=2.0

%除出來(lái)的結(jié)果為余數(shù)

10%3=1
10%5=0

乘/冪

2*3=6
2**3=8

轉(zhuǎn)義符\

  • 反斜杠\為轉(zhuǎn)義符,讓其后的符號(hào)輸出本身,如:
    print("I'm a sexy man! ")
    結(jié)果為:
    I'm a sexy man!
  • 字母r放的字符串引號(hào)前面,可以讓字符串內(nèi)的全部符號(hào)輸出本身,如:
    print(r"你,\n給我等著...\n滾!")
    結(jié)果為:
    你,\n給我等著...\n滾!
    對(duì)比下面:
    print("你,\n給我等著...\n滾!")
    結(jié)果為:
你,
給我等著...
滾!

四舍五入

收整函數(shù)ROUND(參數(shù)1,參數(shù)2),如:

round(1.23,1)=1.2
ROUND(1.23)=1

即該函數(shù)無(wú)第二個(gè)參數(shù)即是四舍五入取整

print用法詳解

  • 說(shuō)明文檔

def print(*args, **kwargs): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout)
Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
"""
即:print就是可以帶參數(shù)的.

  • 參數(shù)end:
    結(jié)尾符,默認(rèn)為回車:\n
print('hello1')
print('hello2', end="\n") 
print('hello3') 
print('hello4', end="") #這是空字符串 
print('hello5')
print('hello6', end=" ") #這是空格
print('hello7')

結(jié)果為:

hello1
hello2
hello3
hello4hello5
hello6 hello7
  • 參數(shù):sep
    各個(gè)值之間的連接符昨寞,默認(rèn)是空格:" "
print('hello', 'hello', 'hello') 
print('hello', 'hello', 'hello', sep=" ") #一個(gè)空格
print('hello', 'hello', 'hello', sep="  ") #兩個(gè)空格
print('hello', 'hello', 'hello', sep="+") 
print('hello', 'hello', 'hello', sep="-") 
print('hello', 'hello', 'hello', sep="+-*/")

結(jié)果為:

hello hello hello
hello hello hello
hello  hello  hello
hello+hello+hello
hello-hello-hello
hello+-*/hello+-*/hello
  • 參數(shù):file
    file參數(shù)就是把print的結(jié)果輸出到哪里去的作用。默認(rèn)是系統(tǒng)標(biāo)準(zhǔn)輸出,就是在交互shell里輸出援岩。
with open('print_output.txt','w') as f:
      print('hello', 'hello', 'hello', sep="+-*/", file=f)

字符串和編碼:摘錄鏈接

因?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é)省空間:

| 字符 | ASCII | Unicode |UTF-8 |
|:--------:|:--------:|:-----------:|:--- -----:|
| A |01000001|00000000 01|00000101000001|
| 中 | x| 01001110 00101101| 111001001011100010101101 |
從上面的表格還可以發(fā)現(xiàn)县好,UTF-8編碼有一個(gè)額外的好處围橡,就是ASCII編碼實(shí)際上可以被看成是UTF-8編碼的一部分,所以缕贡,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作翁授。

搞清楚了ASCII拣播、Unicode和UTF-8的關(guān)系,我們就可以總結(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編碼塞赂。

用記事本編輯的時(shí)候泪勒,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后宴猾,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:

瀏覽網(wǎng)頁(yè)的時(shí)候圆存,服務(wù)器會(huì)把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:

所以你看到很多網(wǎng)頁(yè)的源碼上會(huì)有類似<meta charset="UTF-8" />的信息,表示該網(wǎng)頁(yè)正是用的UTF-8編碼仇哆。

Python的字符串編碼轉(zhuǎn)換

搞清楚了令人頭疼的字符編碼問(wèn)題后沦辙,我們?cè)賮?lái)研究Python的字符串。

在最新的Python 3版本中税产,字符串是以Unicode編碼的怕轿,也就是說(shuō)偷崩,Python的字符串支持多語(yǔ)言辟拷,例如:

print('包含中文的str')
包含中文的str

對(duì)于單個(gè)字符的編碼,Python提供了ord()函數(shù)獲取字符的整數(shù)表示阐斜,chr()函數(shù)把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符:

 ord('A')
65

ord('中')
20013

chr(66)
'B'

chr(25991)
'文'

如果知道字符的整數(shù)編碼衫冻,還可以用十六進(jìn)制這么寫(xiě)str:

'\u4e2d\u6587'
'中文'

兩種寫(xiě)法完全是等價(jià)的。

由于Python的字符串類型是str谒出,在內(nèi)存中以Unicode表示隅俘,一個(gè)字符對(duì)應(yīng)若干個(gè)字節(jié)。如果要在網(wǎng)絡(luò)上傳輸笤喳,或者保存到磁盤(pán)上为居,就需要把str變?yōu)橐宰止?jié)為單位的bytes。

Python對(duì)bytes類型的數(shù)據(jù)用帶b前綴的單引號(hào)或雙引號(hào)表示:

x = b'ABC'

要注意區(qū)分'ABC'和b'ABC'杀狡,前者是str蒙畴,后者雖然內(nèi)容顯示得和前者一樣,但bytes的每個(gè)字符都只占用一個(gè)字節(jié)呜象。

以Unicode表示的str通過(guò)encode()方法可以編碼為指定的bytes膳凝,例如:

'ABC'.encode('ascii')
b'ABC'

'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

'中文'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

純英文的str可以用ASCII編碼為bytes,內(nèi)容是一樣的恭陡,含有中文的str可以用UTF-8編碼為bytes蹬音。含有中文的str無(wú)法用ASCII編碼,因?yàn)橹形木幋a的范圍超過(guò)了ASCII編碼的范圍休玩,Python會(huì)報(bào)錯(cuò)著淆。

在bytes中劫狠,無(wú)法顯示為ASCII字符的字節(jié),用\x##顯示牧抽。

反過(guò)來(lái)嘉熊,如果我們從網(wǎng)絡(luò)或磁盤(pán)上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes扬舒。要把bytes變?yōu)閟tr阐肤,就需要用decode()方法:

 b'ABC'.decode('ascii')
'ABC'

 b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

要計(jì)算str包含多少個(gè)字符,可以用len()函數(shù):

len('ABC')
3

len('中文')
2

len()函數(shù)計(jì)算的是str的字符數(shù)讲坎,如果換成bytes孕惜,len()函數(shù)就計(jì)算字節(jié)數(shù):

len(b'ABC')
3

len(b'\xe4\xb8\xad\xe6\x96\x87')
6

len('中文'.encode('utf-8'))
6

可見(jiàn),1個(gè)中文字符經(jīng)過(guò)UTF-8編碼后通常會(huì)占用3個(gè)字節(jié)晨炕,而1個(gè)英文字符只占用1個(gè)字節(jié)衫画。

在操作字符串時(shí)俐巴,我們經(jīng)常遇到str和bytes的互相轉(zhuǎn)換疑枯。為了避免亂碼問(wèn)題,應(yīng)當(dāng)始終堅(jiān)持使用UTF-8編碼對(duì)str和bytes進(jìn)行轉(zhuǎn)換糊昙。

由于Python源代碼也是一個(gè)文本文件费奸,所以弥激,當(dāng)你的源代碼中包含中文的時(shí)候,在保存源代碼時(shí)愿阐,就需要?jiǎng)?wù)必指定保存為UTF-8編碼微服。當(dāng)Python解釋器讀取源代碼時(shí),為了讓它按UTF-8編碼讀取缨历,我們通常在文件開(kāi)頭寫(xiě)上這兩行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注釋是為了告訴Linux/OS X系統(tǒng)以蕴,這是一個(gè)Python可執(zhí)行程序,Windows系統(tǒng)會(huì)忽略這個(gè)注釋辛孵;

第二行注釋是為了告訴Python解釋器丛肮,按照UTF-8編碼讀取源代碼,否則魄缚,你在源代碼中寫(xiě)的中文輸出可能會(huì)有亂碼宝与。

申明了UTF-8編碼并不意味著你的.py文件就是UTF-8編碼的,必須并且要確保文本編輯器正在使用UTF-8 without BOM編碼:

摘錄自:鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鲜滩,一起剝皮案震驚了整個(gè)濱河市伴鳖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徙硅,老刑警劉巖榜聂,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嗓蘑,居然都是意外死亡须肆,警方通過(guò)查閱死者的電腦和手機(jī)匿乃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)豌汇,“玉大人幢炸,你說(shuō)我怎么就攤上這事【芗” “怎么了宛徊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逻澳。 經(jīng)常有香客問(wèn)我闸天,道長(zhǎng),這世上最難降的妖魔是什么斜做? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任苞氮,我火速辦了婚禮,結(jié)果婚禮上瓤逼,老公的妹妹穿的比我還像新娘笼吟。我一直安慰自己,他們只是感情好霸旗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布贷帮。 她就那樣靜靜地躺著,像睡著了一般定硝。 火紅的嫁衣襯著肌膚如雪皿桑。 梳的紋絲不亂的頭發(fā)上毫目,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天蔬啡,我揣著相機(jī)與錄音,去河邊找鬼镀虐。 笑死箱蟆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刮便。 我是一名探鬼主播空猜,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恨旱!你這毒婦竟也來(lái)了辈毯?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搜贤,失蹤者是張志新(化名)和其女友劉穎谆沃,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體仪芒,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唁影,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年耕陷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片据沈。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哟沫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锌介,到底是詐尸還是另有隱情嗜诀,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布孔祸,位于F島的核電站裹虫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏融击。R本人自食惡果不足惜筑公,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望尊浪。 院中可真熱鬧匣屡,春花似錦、人聲如沸拇涤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鹅士。三九已至券躁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掉盅,已是汗流浹背也拜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趾痘,地道東北人慢哈。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像永票,于是被迫代替她去往敵國(guó)和親卵贱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容