第1章 Python變量與數(shù)據(jù)類型
1-1 Python中的基礎(chǔ)數(shù)據(jù)類型
一腌紧、整數(shù)
- Python可以處理任意大小的整數(shù),包括整整數(shù)畜隶、負(fù)整數(shù)壁肋,表示方法與數(shù)學(xué)中的表示方法一樣。
二籽慢、浮點(diǎn)數(shù)
- 浮點(diǎn)數(shù)浸遗,即小數(shù),可以用科學(xué)記數(shù)法和數(shù)學(xué)寫法表示箱亿;
- 整數(shù)和浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)部的存儲(chǔ)方式是不同的跛锌,整數(shù)運(yùn)算永遠(yuǎn)是精確的,浮點(diǎn)數(shù)運(yùn)算則可能會(huì)有四舍五入的誤差届惋。
三髓帽、字符串
- 以 ‘ ’ 或 “ ” 括起來的任意文本。切記: ‘ ’ 和 “ ” 只是字符串的一種表示方式脑豹,并不是字符串的一部分郑藏。
四、布爾值
- 一個(gè)布爾值只有 True 或 False (注意:大小寫)瘩欺,Python中可以直接使用 True 和 False 表示布爾值必盖,也可以通過布爾運(yùn)算計(jì)算出來;
- 布爾運(yùn)算有3個(gè)運(yùn)算符:and or not俱饿。
五歌粥、空值
- 空值是Python中的一個(gè)特殊字符,用 None 表示稍途,切記:None 與0的含義不一樣阁吝。
1-2 Python之Print語句
- print 輸出指定的內(nèi)容;
- 多個(gè)字符串時(shí)用逗號(hào)
(,)
隔開械拍,可以連成一串輸出突勇,print 打印時(shí)遇到逗號(hào)會(huì)輸出一個(gè)空格; - print 可以打印數(shù)值或數(shù)值運(yùn)算坷虑。
1-3 Python的注釋
- 注釋是用來說明代碼作用的甲馋,程序運(yùn)行時(shí),python 解釋器會(huì)直接忽略掉注釋迄损;
- Python 的注釋是以 “ # ” 開頭定躏,一直到行尾的文字;
- 注釋的用途:不需要但又不想刪除的代碼,可以通過注釋暫時(shí)屏蔽痊远。
1-4 Python中什么是變量
- 計(jì)算機(jī)程序中的變量垮抗,不僅可以是數(shù)值,也可以是任意的數(shù)據(jù)類型碧聪;
- Python中冒版,變量是用一個(gè)變量名表示,變量名必須是大小寫英文逞姿、數(shù)字和下劃線(_)的組合辞嗡,且不能以
數(shù)字
開頭,區(qū)分大小寫
滞造; - Python中续室,等號(hào)
(=)
是賦值語句,可以將任意類型的數(shù)據(jù)賦值給變量谒养,同一變量可以反復(fù)賦值挺狰,而且可以是不同類型的變量; - 變量類型不固定的語言是動(dòng)態(tài)語言买窟,如python她渴;靜態(tài)語言是指在定義變量時(shí)必須指定變量類型的語言,如java蔑祟;和靜態(tài)語言相比,動(dòng)態(tài)語言更加靈活沉唠。
1-5 Python中定義字符串
- 當(dāng)字符串本身包含了
‘ ’
時(shí)疆虚,可以用“ ”
括起來表示;當(dāng)字符串本身包含了“ ”
時(shí)满葛,可以用‘ ’
括號(hào)括起來表示径簿; - 當(dāng)字符串本身包含了
‘ ’
和“ ”
時(shí),需要對(duì)字符串中的特殊字符進(jìn)行轉(zhuǎn)義嘀韧,Python中使用\
進(jìn)行轉(zhuǎn)義篇亭,在‘ ’
和“ ”
前面插入\
表示該字符為普通字符; - 轉(zhuǎn)義字符不計(jì)入字符串的內(nèi)容中锄贷,常見的需要轉(zhuǎn)義的字符:
\n
表示換行译蒂、\t
表示一個(gè)制表符、\\
表示字符串\
本身谊却。
1-6 Python中raw字符串與多行字符串
- 如果一個(gè)字符串中包含了多個(gè)需要轉(zhuǎn)義的字符柔昼,對(duì)每一個(gè)都加轉(zhuǎn)義符會(huì)很麻煩,通過在字符串前面加 r 表示這是一個(gè)
raw
字符串炎辨,里面的特殊字符就不需要轉(zhuǎn)義了捕透; -
r ‘…’
表示法,不能表示多行字符串,也不能表示包含‘ ’
和“ ”
的字符串乙嘀; -
‘“.....”’
表示法末购,可以表示多行字符串,也是一個(gè) raw 字符串虎谢,可以表示上述說的情況盟榴。
1-7 Python中Unicode字符串
- 計(jì)算機(jī)只能處理數(shù)值,若要處理文本嘉冒,需要先將文本轉(zhuǎn)換為數(shù)字才能處理曹货。
0-255
用來表示大小寫英文字母、數(shù)字和特殊符號(hào)讳推,被稱為ASCII
編碼顶籽; - 中國(guó)制定了
GB2312
用來將中文編碼進(jìn)去,且不能和ASCII編碼沖突银觅,類似的日本礼饱、韓國(guó)也存在類似的問題,為了統(tǒng)一所有文字的編碼究驴,Unicode
編碼應(yīng)運(yùn)而生镊绪; - Python的誕生比ASCII編碼要早,所以最早的Python僅支持ASCII編碼洒忧,后來添加了支持Unicode編碼蝴韭,以Unicode編碼的字符用
u‘…’
表示,不加 u 則中文無法正常顯示熙侍; - Unicode字符串除了多了一個(gè)
u
以外榄鉴,與普通字符串沒有區(qū)別,轉(zhuǎn)義字符和多行表示法仍然有效蛉抓; - 在Python環(huán)境中庆尘,若出現(xiàn)了
UnicodeDecodeError
是因?yàn)?code>.py文件保存的格式有問題,可以在代碼的第一行添加注釋# -*- coding: utf-8 -*-
目的是告訴Python解釋器用UTF-8
編碼解讀源碼巷送。
1-8 Python中整數(shù)與浮點(diǎn)數(shù)
- Python支持整數(shù)與浮點(diǎn)數(shù)的四則運(yùn)算驶忌,和數(shù)學(xué)四則運(yùn)算一致,可以使用括號(hào)嵌套笑跛;
- 不同點(diǎn):Python
3
中除法運(yùn)算結(jié)果永遠(yuǎn)是浮點(diǎn)數(shù)付魔、浮點(diǎn)數(shù)運(yùn)算結(jié)果仍是浮點(diǎn)數(shù),但是浮點(diǎn)數(shù)與整數(shù)的混合運(yùn)算結(jié)果為浮點(diǎn)數(shù)飞蹂; - Python一定要區(qū)分整數(shù)運(yùn)算和浮點(diǎn)數(shù)運(yùn)算的原因:整數(shù)運(yùn)算的結(jié)果永遠(yuǎn)是精確的抒抬,而浮點(diǎn)數(shù)運(yùn)算的結(jié)果不一定是準(zhǔn)確的,因?yàn)橛?jì)算機(jī)內(nèi)存再大也無法精確表示出無限循環(huán)小數(shù)晤柄;
- Python提供了一個(gè)求余數(shù)的運(yùn)算
%
可以計(jì)算余數(shù)擦剑。
1-9 Python中布爾類型
- 布爾運(yùn)算在計(jì)算機(jī)中用來做條件判斷,根據(jù)計(jì)算結(jié)果為 True 或 False 自動(dòng)執(zhí)行后續(xù)的代碼;
- 在Python中惠勒,布爾運(yùn)算可以與其他數(shù)據(jù)類型做 and \ or \ not 運(yùn)算赚抡;
- Python將 0 、空字符串 ‘ ’ 纠屋、None均看作是 False 涂臣,將其它數(shù)值和非空字符串均看作是 True ;
- and 和 or 運(yùn)算時(shí)的短路原則:Python解釋器在做布爾運(yùn)算時(shí)售担,只要能提前確定計(jì)算結(jié)果赁遗,則不再執(zhí)行后續(xù)代碼,直接返回結(jié)果族铆。
第2章 List 和 Tuple 數(shù)據(jù)類型
2-1 Python創(chuàng)建list
- list是一種數(shù)學(xué)意義上的有序集合岩四,用
[ ]
表示,可以隨時(shí)添加和刪除其中的元素哥攘; - Python是一種動(dòng)態(tài)語言剖煌,list中的元素并不要求都是同一種數(shù)據(jù)類型,可以包含各種類型的數(shù)據(jù)逝淹,也可以是空的耕姊。
2-2 Python按照索引訪問list
- 索引即元素在list中的位置,list的索引是從第0位開始的栅葡,第二個(gè)元素是第1位茉兰,以此類推;
- 注意:使用索引時(shí)欣簇,千萬不能越界邦邦,否則會(huì)報(bào)錯(cuò)。通常使用切片來訪問元素醉蚁,即list[索引值]。
2-3 Python之倒序訪問list
- 倒序訪問時(shí)鬼店,最后一位元素的索引是從-1開始的网棍,倒數(shù)第二位是-2,以此類推妇智,切記:使用倒序索引時(shí)不能越界滥玷。
2-4 Python之list添加新元素
- 方法一:
list.append()
:總是將元素追加至list尾部; - 方法二:
list.insert(index, name)
:將指定的元素name添加至指定索引index的位置巍棱,該索引之后的元素自動(dòng)向后移動(dòng)惑畴。
2-5 Python之list刪除元素
-
list.pop()
:默認(rèn)總是刪除list中最后一個(gè)元素,當(dāng)需要?jiǎng)h除指定索引的元素時(shí)航徙,用list.pop(index)來指定索引如贷; -
pop()
的結(jié)果是返回本次刪除的元素,同時(shí)list中的指定元素會(huì)被刪除。
2-6 Python之替換list元素
- 對(duì)list中的元素進(jìn)行更新杠袱,通過切片的方法對(duì)list的索引進(jìn)行賦值尚猿,即可實(shí)現(xiàn)新元素代替原來元素,list元素個(gè)數(shù)保持不變楣富。
2-7 Python之創(chuàng)建Tuple
- Tuple是一種有序的集合凿掂,用
( )
表示,和list類似纹蝴,但Tuple一旦創(chuàng)建后庄萎,不可修改; - 訪問Tuple的方法和list一樣通過索引切片即可塘安,但不能賦值成別的元素糠涛,更沒有append()/pop()/insert()等函數(shù)。
2-8 Python之單元素Tuple
- Tuple和list一樣耙旦,可以包含任意個(gè)元素脱羡,空Tuple用Tuple()表示;
-
( )
既可以表示tuple免都,也可以作為括號(hào)表示運(yùn)算時(shí)的優(yōu)先級(jí)锉罐,單個(gè)元素時(shí)會(huì)被Python解釋器認(rèn)為是元素,而非tuple绕娘; - 因?yàn)槭褂? )表示Tuple存在歧義脓规,Python規(guī)定:?jiǎn)卧豻uple時(shí)需要在元素后加一個(gè)逗號(hào)
“,”
。多元素tuple時(shí)可以不加险领;
2-9 Python之可變Tuple
- Tuple的不可變是指其元素指向不變侨舆,即指向了元素 a 就不能指向元素 b ,指向了list1就不能再指向list2绢陌;
- 當(dāng)Tuple中的所有元素本身是不可變時(shí)挨下,Tuple是不可變的;當(dāng)可變?cè)厝鏻ist作為Tuple的元素時(shí)脐湾,list中的元素是可變的臭笆,可以變相地實(shí)現(xiàn)Tuple可變。
第3章 條件判斷和循環(huán)
3-1 Python之if語句
- if 語句用于控制程序的執(zhí)行秤掌,"判斷條件"成立時(shí)愁铺,則執(zhí)行后面的語句,執(zhí)行內(nèi)容可以多行闻鉴,以縮進(jìn)來區(qū)分同一范圍茵乱;
- if后接表達(dá)式,用冒號(hào)
(:)
表示代碼塊開始孟岛,Python代碼的縮緊規(guī)則:具有相同縮進(jìn)的代碼視為代碼塊瓶竭,縮進(jìn)時(shí)的習(xí)慣:4個(gè)空格鍵督勺,不要用Tab鍵、不要Tab鍵與空格混用在验;
3-2 Python之if-else語句
- 利用if......else語句玷氏,可以根據(jù)條件表達(dá)式的值為True或False,分別執(zhí)行if代碼塊腋舌,或else代碼塊壳坪,else后面要緊跟冒號(hào)
(:)
钉稍; - 大于號(hào)
(>)
和小于號(hào)(<)
在沒有括號(hào)的情況下會(huì)比and
和or
優(yōu)先判斷。
3-3 Python之for循環(huán)
- for循環(huán):重復(fù)執(zhí)行語句,依次將集合序列中的元素逐個(gè)取出囊扳,并賦值給指定的變量泣棋;
- for……else循環(huán):和普通的for循環(huán)一樣隘道,else語句會(huì)在代碼正常執(zhí)行完后執(zhí)行赌渣,而非因break中斷跳出。
3-4 Python之while循環(huán)
- while循環(huán):在給定的判斷條件為true 時(shí)執(zhí)行循環(huán)體淮腾,否則退出循環(huán)體糟需;
- while……else循環(huán),是在判斷條件為False時(shí)執(zhí)行else代碼語句谷朝;
- while循環(huán)的判斷條件總為真時(shí)洲押,會(huì)無限執(zhí)行下去,變成死循環(huán)圆凰,因此要注意while循環(huán)的退出條件杈帐;
3-5 Python之循環(huán)控制語句
- break語句:終止for循環(huán)或while循環(huán),并且跳出整個(gè)循環(huán)专钉,即使循環(huán)條件沒有False或序列還沒被完全循環(huán)完挑童;
- continue語句:跳出for循環(huán)或while循環(huán)本次的循環(huán),即跳過當(dāng)前循環(huán)剩下的代碼語句跃须,繼續(xù)進(jìn)行下一輪循環(huán)站叼;
- pass語句:空語句,不做任何事情菇民,用做占位語句保持程序結(jié)構(gòu)的完整性尽楔,通常用在定義類時(shí)使用。
3-6 Python之多重循環(huán)
- Python語言中玉雾,允許一個(gè)循環(huán)中嵌套另外一個(gè)循環(huán),如for循環(huán)中嵌套for循環(huán)轻要、while循環(huán)中嵌套for循環(huán)复旬。
第4章 Dict和Set數(shù)據(jù)類型
4-1 Python之什么是dict
- dict:一種鍵值對(duì)組成的無序集合,即索引
(key)
和對(duì)應(yīng)值(value)
冲泥,用花括號(hào){ }
表示驹碍,鍵與值之間用冒號(hào)(:)
連接壁涎,一個(gè)key:value
算一個(gè)元素,元素之間用逗號(hào)(,)
連接志秃; - dict的元素是通過key進(jìn)行存取怔球,而非list的索引存取,所以dict的key必須是唯一的浮还,但是value不必唯一竟坛。
4-2 Python之訪問dict
- dict通過切片的方法:d[key]來訪問dict的元素,和list的方法類似钧舌,只要key存在則返回對(duì)應(yīng)的value担汤,若不存在則報(bào)錯(cuò)KeyError;
- 若避免出現(xiàn)KeyError的情況洼冻,可以通過if進(jìn)行判斷崭歧,也可以通過dict自帶的方法,dict.get(key)進(jìn)行訪問dict撞牢,若key不存在則返回None率碾。
4-3 Python中dict的特點(diǎn)
- 特點(diǎn)一:查找速度快,無論dict有10個(gè)元素還是10萬個(gè)屋彪,速度都一樣所宰,而list是隨著元素個(gè)數(shù)的增多而逐漸下降。對(duì)應(yīng)的缺點(diǎn):占用內(nèi)存多撼班,浪費(fèi)資源歧匈;
-
特點(diǎn)二:存儲(chǔ)的元素
key:value
是無序的,打印輸出的順序和創(chuàng)建的順序不一定一樣砰嘁,不同的機(jī)器打印出來的順序也可能不一樣件炉; -
特點(diǎn)三:作為key的元素必須是不可變的,list不能作為key矮湘,最常用的是字符串斟冕。
4-4 Python之更新dict
-
dict[key] = value
可以將指定的元素添加到dict,若已存在相同的key值缅阳,則替換原有的元素磕蛇; -
dict.clear()
:刪除dict中的所有元素; -
dict.update(dict1)
:將dict1添加到dict中十办; -
dict.pop(key)
:刪除dict中指定key的元素秀撇,并返回該key對(duì)應(yīng)的value; -
dict.popitem()
:隨機(jī)刪除dict中的一個(gè)元素(鍵值對(duì))向族,一般為末尾呵燕,并返回刪除的鍵值對(duì)。
4-5 Python之遍歷dict
- dict和list一樣件相,都是序列再扭,通過for循環(huán)或while循環(huán)可以遍歷其中的元素氧苍;
-
dict.keys()
:以列表形式返回dict所有的鍵組成的可迭代對(duì)象,dict通過對(duì)key的遍歷可以在循環(huán)體內(nèi)返回對(duì)應(yīng)的value泛范; -
dict.values()
:以列表的形式让虐,返回dict所有的值組成的可迭代對(duì)象; -
dict.items()
:以列表的形式罢荡,返回由key與value組成的Tuple構(gòu)成的可迭代對(duì)象赡突。 - 字典的
keys()
函數(shù)和items()
函數(shù),返回的均是視圖對(duì)象柠傍,支持集合的交麸俘、并、差等運(yùn)算惧笛,但是values()
函數(shù)不支持从媚。
4-6 Python中什么是set
- set:無序不重復(fù)的數(shù)據(jù)集合,類似于dict的key患整,基本功能:關(guān)系測(cè)試拜效、刪除重復(fù)元素;
- 創(chuàng)建set:調(diào)用set()并傳入一個(gè)list各谚,set([list])紧憾,其打印形式類似list,但結(jié)果無序昌渤;
- 當(dāng)傳入set()的list中存在重復(fù)元素時(shí)赴穗,set()的結(jié)果會(huì)自動(dòng)忽略掉重復(fù)的元素;
- 不支持切片和索引膀息;
- 支持一系列標(biāo)準(zhǔn)操作:并集
(|)
般眉、交集(&)
、差集(-)
潜支、對(duì)稱差集(^)
4-7 Python之訪問set
- 由于set中的元素是無序的甸赃,無法通過索引來訪問,訪問set中的元素實(shí)際上就是判斷一個(gè)元素是否在set中冗酿;
- 在進(jìn)行元素判斷時(shí)埠对,特別注意要區(qū)分英文字母的大小寫;
4-8 Python之set的特點(diǎn)
- 特點(diǎn):set的內(nèi)部結(jié)構(gòu)和dict很像裁替,運(yùn)算速度快项玛、set的元素和dict的key類似,必須是不變對(duì)象弱判、set的元素是無序存儲(chǔ)襟沮;
- 用途:判斷用戶輸入的星期/月份是否是合法的,通過提前設(shè)定的set集合,通過一步判斷即可快速實(shí)現(xiàn)臣嚣。
4-9 Python之遍歷set
- set是一個(gè)集合,遍歷set和遍歷list類似剥哑,都可以通過for循環(huán)實(shí)現(xiàn)硅则,其結(jié)果的順序和set中元素的順序很可能不同,不同機(jī)器上的運(yùn)行結(jié)果很可能也不同株婴。
4-10 Python之更新set
- 更新set元素:把新的元素添加到set 中怎虫、把已有元素從set中刪除;
-
set.add(name)
:將新元素name添加到set中困介,若set 中已存在name大审,則無法添加進(jìn)去,但是不會(huì)報(bào)錯(cuò)座哩; -
set.remove(name)
:將指定元素name從set 中刪除徒扶,若set中不存在name,則會(huì)報(bào)錯(cuò)根穷,需要提前做判斷姜骡。
第5章 函數(shù)
5-1 Python之什么是函數(shù)
- 抽象是數(shù)學(xué)中最常見的概念,借助抽象我們不必關(guān)注底層的具體計(jì)算過程屿良,直接在更高的層次上思考問題圈澈,寫計(jì)算機(jī)程序也一樣,函數(shù)就是最基本的一種代碼抽象尘惧。Python不僅能輕松靈活地定義函數(shù)康栈,本身也內(nèi)置了很多有用的函數(shù),可以調(diào)用喷橙;
- 函數(shù):指組織好的啥么,可重復(fù)使用的,用來實(shí)現(xiàn)單一或相關(guān)功能的代碼段重慢。函數(shù)能提高應(yīng)用的模塊性和代碼的重復(fù)利用率饥臂。
5-2 Python之調(diào)用函數(shù)
- 調(diào)用函數(shù),需要知道函數(shù)的名稱和參數(shù)似踱,可以在交互命令行通過
help(name)
查看函數(shù)的信息隅熙; - 調(diào)用函數(shù)時(shí):1)若傳入的參數(shù)數(shù)量不對(duì),會(huì)報(bào)
TypeError
錯(cuò)誤核芽,并給出信息:該函數(shù)需要幾個(gè)參數(shù)囚戚,卻提供了幾個(gè)參數(shù);2)若傳入的參數(shù)類型不能被函數(shù)接受轧简,也會(huì)報(bào)TypeError
錯(cuò)誤驰坊,并給出信息:是錯(cuò)誤的參數(shù)類型;
5-3 Python之編寫函數(shù)
- 定義一個(gè)函數(shù)哮独,使用def語句拳芙,依次寫出函數(shù)名察藐、括號(hào)、括號(hào)中的參數(shù)舟扎、冒號(hào)分飞,然后在縮進(jìn)塊中編寫函數(shù)體,return語句用來退出函數(shù)睹限,選擇性地向調(diào)用方返回一個(gè)表達(dá)式或數(shù)值譬猫;
- 函數(shù)體內(nèi)部的語句在執(zhí)行時(shí),一旦執(zhí)行到return語句羡疗,函數(shù)就執(zhí)行完畢染服,并返回結(jié)果;若沒有return語句叨恨,函數(shù)執(zhí)行完畢后會(huì)返回None柳刮。
5-4 Python函數(shù)之返回多個(gè)值
- Python函數(shù)返回多個(gè)值,其實(shí)是返回一個(gè)Tuple痒钝,在語法上诚亚,返回tuple可以省略括號(hào)寫起來方便,多個(gè)變量可以同時(shí)接受一個(gè)tuple午乓,按位置賦給對(duì)應(yīng)的值站宗。
5-5 Python之遞歸函數(shù)
- 若一個(gè)函數(shù)在內(nèi)部調(diào)用了該函數(shù)本身,則稱為遞歸函數(shù)益愈。其優(yōu)點(diǎn):定義簡(jiǎn)單梢灭、邏輯清晰,理論上所有的遞歸函數(shù)都可以寫成循環(huán)函數(shù)蒸其;
- 使用遞歸函數(shù)要防止棧溢出敏释。計(jì)算機(jī)中,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)果實(shí)現(xiàn)的摸袁,每進(jìn)入一個(gè)函數(shù)調(diào)用钥顽,棧會(huì)加一層棧幀,每當(dāng)函數(shù)返回棧就會(huì)減少一幀靠汁,由于棧的大小不是無限循環(huán)蜂大,遞歸調(diào)用的次數(shù)過多時(shí)會(huì)導(dǎo)致棧溢出。
5-6 Python之定義默認(rèn)參數(shù)
- 調(diào)用函數(shù)時(shí)蝶怔,可以使用的正式參數(shù)類型:必需參數(shù)奶浦、關(guān)鍵字參數(shù)、默認(rèn)參數(shù)踢星、可變參數(shù)澳叉;
- 必需參數(shù):以正確的順序傳入?yún)?shù),調(diào)用時(shí)和聲明時(shí)必須一致;
- 關(guān)鍵字參數(shù):函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定轉(zhuǎn)入的參數(shù)值成洗;
- 默認(rèn)參數(shù):默認(rèn)參數(shù)的作用是簡(jiǎn)化函數(shù)調(diào)用(定義時(shí)默認(rèn)設(shè)置五督,調(diào)用時(shí)不用傳參),只能定義在必需參數(shù)的后面瓶殃;
5-7 Python之定義可變參數(shù)
- 若讓一個(gè)函數(shù)可以接受任意個(gè)參數(shù)概荷,可以定義一個(gè)可變參數(shù),用星號(hào)
(*)
+變量名
表示碌燕,該變量會(huì)存入所有未命名的參數(shù),Python會(huì)將轉(zhuǎn)入的一組參數(shù)封裝成一個(gè)tuple專遞給該可變參數(shù)继薛,函數(shù)調(diào)用沒有指定參數(shù)時(shí)修壕,該變量是空tuple。
第6章 切片
6-1 Python之切片操作
- Python提供了切片(slice)功能遏考,用來簡(jiǎn)化取指定索引范圍的操作慈鸠,通常用來對(duì)list和tuple進(jìn)行提取元素;
-
list[0:n]
表示從索引0開始取灌具,直到索引n為止青团,但是不包括索引n,當(dāng)?shù)谝粋€(gè)索引是0時(shí)咖楣,可以簡(jiǎn)寫:list[:n]
督笆; -
list[n:]
表示從索引n開始取,取之后所有的元素诱贿; -
list[:]
表示從頭到尾取出所有元素娃肿,實(shí)際上相當(dāng)于復(fù)制出了一個(gè)新list; -
list[m:n:s]
表示從索引m開始珠十,到索引n(不包含)結(jié)束料扰,步長(zhǎng)間隔為s; - 取多個(gè)元素時(shí)焙蹭,切片右邊界值n表示索引為n(不包含)晒杈,返回的是索引為n-1的元素,因?yàn)樗饕菑?開始孔厉,所以返回的是序列中第n個(gè)元素拯钻;
- 取單個(gè)元素時(shí),切片值n表示索引為n撰豺,因?yàn)樗饕菑?開始说庭,所以返回的是序列中第n+1位元素。
6-2 Python之倒序切片
- Python的切片提供了倒序切片郑趁,list最后一個(gè)元素的索引是 -1刊驴,倒序切片方法和正序除了索引不用,用法完全一樣;
-
list[-n:-m]
表示從索引-n開始取捆憎,直到索引到為-m為止舅柜,但是不包括索引為-m,當(dāng)-n后所有元素都取完時(shí)躲惰,可以簡(jiǎn)寫:list[-n:]致份; -
list[:-n]
表示從最開始取,直到索引為-n為止础拨,但是不包含-n氮块; - 取多個(gè)元素時(shí),切片右邊界為-n表示索引為-n(不包含)诡宗,返回的是序列中倒數(shù)第-(n+1)個(gè)元素
- 取單個(gè)元素時(shí)滔蝉,切片值為-n表示索引為-n,返回的是序列中倒數(shù)第n個(gè)元素塔沃;
6-3 Python之字符串切片
- 字符串’xxx’和Unicode字符串u‘xxx’也可以看作是一個(gè)list蝠引,每個(gè)字符是一個(gè)元素,也可以進(jìn)行切片操作蛀柴,操作結(jié)果仍是字符串螃概。
第7章 迭代
7-1 Python之什么是迭代
- 集合是指包含一組元素的數(shù)據(jù)結(jié)構(gòu),如:有序集合list/tuple/str/unicode鸽疾、無序集合set/dict吊洼;
- 迭代(iteration)操作:對(duì)于一個(gè)集合,無論是否有序制肮,通過for循環(huán)都可以依次取出集合的每個(gè)元素融蹂。
7-2 Python之索引迭代
- 在Python中,迭代永遠(yuǎn)是取元素本身弄企,而非元素的索引超燃;
-
enumerate()
:將可遍歷的數(shù)據(jù)對(duì)象(如list/tuple/str)組合為一個(gè)由索引及對(duì)應(yīng)元素組成的tuple; - 索引迭代拘领,并非真的按照索引進(jìn)行訪問意乓,而是由enumerate函數(shù)把每個(gè)元素變成Tuple(index,element),再進(jìn)行for循環(huán)约素,遍歷出索引及元素本身届良;
-
enumerate(sequence, [start=0])
函數(shù)的默認(rèn)參數(shù)start可以指定起始索引的值為0或1。
7-3 Python之迭代dict的value
- dict對(duì)象本身是可迭代對(duì)象圣猎,但每次迭代的是dict的key士葫,通過dict.value()方法可以將dict的所有value組成一個(gè)list進(jìn)行迭代;
-
dict.itervalues()
和dict.value()
的迭代效果一樣送悔,區(qū)別:后者是新生成了list慢显,而前者不作轉(zhuǎn)換爪模,所以更省內(nèi)存; - 迭代是一種抽象的操作荚藻,任何可迭代對(duì)象都可以進(jìn)行for循環(huán)屋灌,我們不關(guān)心內(nèi)部是如何迭代的,它不對(duì)迭代對(duì)象內(nèi)部的數(shù)據(jù)有任何要求应狱。
7-4 Python之迭代dict的key和value
-
dict.items()
:以列表的形式返回由dict的key和value組成的Tuple共郭。items()函數(shù)配合for循環(huán)即可遍歷dict的key和value。
第8章 推導(dǎo)式
8-1 Python 之推導(dǎo)式
- 推導(dǎo)式comprehensions(又稱解析式)疾呻,是Python的一種獨(dú)有特性除嘹;
- 推導(dǎo)式是從一個(gè)數(shù)據(jù)序列構(gòu)建另一個(gè)新的數(shù)據(jù)序列的結(jié)構(gòu)體;
- 在Pyhton2和3中岸蜗,都支持推導(dǎo)式尉咕,有3種類型:1)列表(list)推導(dǎo)式;2)字典(dict)推導(dǎo)式散吵;3)集合(set)推導(dǎo)式。
8-2 列表推導(dǎo)式
- 使用中括號(hào)[]生成列表蟆肆,for循環(huán) + if判斷矾睦,當(dāng)if判斷結(jié)果為True時(shí),把循環(huán)的當(dāng)前元素進(jìn)行表達(dá)式運(yùn)算炎功,添加到列表中枚冗;
- 示例:
[x * x for x in range(1, 11) if x % 2 == 0] = [4, 16, 36, 64, 100]
- 多層推導(dǎo)式:使用for循環(huán)嵌套生成列表,示例:
[m + n for m in 'ABC' for n in '123’] = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3’]
- 將中括號(hào)替換成小括號(hào)蛇损,得到一個(gè)生成器generator
8-3 字典推導(dǎo)式
- 字典推導(dǎo)和列表推導(dǎo)使用方法是類似的赁温,需要將中括號(hào)該改成大括號(hào)
- 示例:
dict1 = {"xz":12, "sm":34},{k:v for k, v in dict1.items() if v % 3 == 0} —> {'xz': 12}
- 該方法可以快速更換dict的key和values
8-4 集合推導(dǎo)式
- 集合推導(dǎo)和列表推導(dǎo)的使用方法是類似的淤齐,需要將中括號(hào)該改成大括號(hào)
- 示例:
{x**2 for x in [1, 1, 2]} —> {1, 4}