第九章芜果、元組、文件和其他

元組

元組由簡單的對象組構(gòu)成融师。元組與列表非常類似右钾,只不過元組不能在原處修改(它們是不可變的),并且通常寫成圓括號(而不是方括號)中的一系列項旱爆。

①舀射、任意對象的有序集合:

與字符串和列表類似,元組是一個位置有序的對象的集合(也就是其內(nèi)容維持從左到右的順序)怀伦。與列表相同脆烟,可以嵌入到任何類別的對象中。

②房待、通過偏移存刃细帷:

同字符串驼抹、列表一樣,在元組中的元素通過偏移(而不是鍵)來訪問拜鹤。

③框冀、屬于不可變序列類型:

類似于字符串,元組是不可變的敏簿,它們不支持應用在列表中任何原處修改操作明也。與字符串和列表類似,元組是序列惯裕,它們支持許多通用的操作温数。

④、固定長度蜻势、異構(gòu)帆吻、任意嵌套:

因為元組是不可變的,在不生成一個拷貝的情況下不能增長或縮短咙边。另一方面猜煮,元組可以包含其他的復合對象(例如,列表败许,字典和其他元組等)王带,因此支持嵌套。

⑤市殷、對象引用的數(shù)組:

與列表相似愕撰,元組最好看做是對象引用的數(shù)組。元組存儲指向其他對象的存取點(引用)醋寝,并且對元組進行索引操作的速度相對較快搞挣。

1、實際應用中的元組:

①音羞、元組的特殊語法:逗號和圓括號:

如果圓括號里的單一對象是元組對象而不是一個簡單的表達式囱桨,需要對Python進行特別說明。如果確實想得到一個元組嗅绰,只要在這一個單個元素之后舍肠,關(guān)閉圓括號之前加一個逗號就可以了。

在不會引起語法沖突的情況下窘面,Python允許忽略元組的圓括號翠语。

②、轉(zhuǎn)換财边、方法以及不可變性:

除了常量語法不同以外肌括,元組的操作和字符串及列表是一致的。值得注意的區(qū)別在于“+”酣难、“*”以及分片操作應用于元組時將返回新元組谍夭,并且元組不提供字符串黑滴、列表和字典中的方法。

列表解析也可用于元組的轉(zhuǎn)換慧库。

盡管元組的方法與列表和字符串不同跷跪,它們在Python2.6和Python3.0中確實由兩個自己的方法——index和count就像對列表一樣工作,但是齐板,它們也針對元組對象定義了吵瞻。

2、為什么有了列表還要元組:

元組的不可變性提供了某種完整性甘磨。

文件

文件這個主要內(nèi)置對象類型提供了一種可以存取Python程序內(nèi)部文件的方法橡羞。

簡而言之,內(nèi)置open函數(shù)會創(chuàng)建一個Python文件對象济舆,可以作為計算機上的一個文件鏈接卿泽。在調(diào)用open之后,你可以通過調(diào)用返回文件對象的方法來讀寫相關(guān)外部文件滋觉。

1签夭、打開文件:

為了打開一個文件,程序會調(diào)用內(nèi)置open函數(shù)椎侠,首先是外部名第租,接著是處理模式。模式典型地用字符串'r'代表為輸入打開文件(默認值)我纪,'w'代表為輸出生成并打開文件慎宾,'a'代表為在文件尾部追加內(nèi)容而打開文件。

①浅悉、處理模式參數(shù)也可以指定為其他選項:

在模式字符串尾部加上b可以進行二進制數(shù)據(jù)處理(行末轉(zhuǎn)換和Python3.0 Unicode編碼被關(guān)閉了)趟据。

加上“+”意味著同時為輸入和輸出打開文件(也就是說,我們可以對相同文件對象進行讀寫术健,往往與對文件中的修改的查找操作配合使用)汹碱。

2、使用文件:

一旦存在一個文件對象苛坚,就可以調(diào)用其它方法來讀寫相關(guān)的外部文件比被。

①、文件迭代器是最好的讀取行工具:

現(xiàn)在從文本文件讀取文字行的最佳方式是根本不要讀取該文件泼舱。

②、內(nèi)容是字符串枷莉,不是對象:

注意從文件讀取的數(shù)據(jù)回到腳本時是一個字符串娇昙。

③、close是通常的選項:

調(diào)用文件close方法將會終止對外部文件的鏈接笤妙。

④冒掌、文件是緩沖的并且是可查找的:

默認情況下噪裕,輸出文件總是緩沖的,這意味著寫入的文本可能不會立即自動從內(nèi)存轉(zhuǎn)換到硬盤——關(guān)閉一個文件股毫,或者運行其flush方法膳音,迫使緩存的數(shù)據(jù)進入硬盤×逦埽可以用額外的open參數(shù)來避免緩存祭陷,但是,這可能會影響性能趣席。

3兵志、實際應用中的文件:

①、Python3.0中的文本和二進制文件:

文本文件把內(nèi)容表示為常規(guī)的str字符串宣肚,自動執(zhí)行Unicode編碼和解碼想罕,并且默認執(zhí)行末行轉(zhuǎn)換。

二進制文件把內(nèi)容表示為一個特殊的bytes字符串類型霉涨,并且允許程序不修改地訪問文件內(nèi)容按价。

②、在文件中存儲并解析Python對象:

需要注意的是笙瑟,我們必須使用轉(zhuǎn)換工具把對象轉(zhuǎn)成字符串楼镐。

字符串rstrip方法去掉多余的行終止符。

字符串split方法逮走,從某個自定義的分隔符的地方將整行斷開鸠蚪,得到的結(jié)果就是一個子字符串列表。

內(nèi)置函數(shù)eval能夠把字符串當作可執(zhí)行程序代碼(從技術(shù)上來講师溅,就是一個含有Python表達式的字符串)茅信。

③、用pickle存儲Python的原生元素:

pickle模塊是能夠讓我們直接在文件中存儲幾乎任何Python對象的高級工具墓臭,也并不要求我們把字符串轉(zhuǎn)換來轉(zhuǎn)換去蘸鲸。它就像是超級通用的數(shù)據(jù)格式化和解析工具。

④窿锉、文件中打包二進制數(shù)據(jù)的存儲與解析:

有些高級應用程序也需要處理打包的二進制數(shù)據(jù)酌摇,這些數(shù)據(jù)可能是C語言程序生成的。Python的標準庫中包含一個能夠在這一范圍起作用的工具:struct模塊能夠構(gòu)造并解析打包的二進制數(shù)據(jù)嗡载。

⑤窑多、文件上下文管理器:

4、其他文件工具:

seek函數(shù)能夠復位你在文件中的當前位置(下次讀寫將應用在該文指)洼滚,flush能夠強制性地將緩存輸出寫入磁盤(文件總默認進行緩存)等埂息。

需要注意的是,雖然open函數(shù)及其返回的文件對象是Python腳本中通向外部文件的主要接口,Python工具集中還有其他類似的文件工具千康,還有其他可用的享幽,例如:

①、標準流:

在sys模塊中預先打開的文件對象拾弃,例如sys.stdout值桩。

②、os模塊中的描述文件:

處理整數(shù)文件豪椿,支持諸如文件鎖定之類的較低級工具奔坟。

③、sockets砂碉、pipes和FIFO文件:

文件類對象蛀蜜,用于同步進程或者通過網(wǎng)絡進行通信。

④增蹭、通過鍵來存取的文件:

通過鍵直接存儲的不變的Python對象滴某。

⑤、Shell命令流:

像os.popen和subprocess.Popen這樣的工具滋迈,支持產(chǎn)生Shell命令霎奢,并讀取和寫入到標準流。

重訪類型分類

①饼灿、對象根據(jù)分類類共享操作:例如幕侠,字符串、列表和元組都共享諸如合并碍彭、長度和索引等序列操作晤硕。

②、只有可變對象(列表庇忌、字典和集合)可以原處修改舞箍;我們不能原處修改數(shù)字、字符串或元組皆疹。

③疏橄、文件導出唯一的方法,因此可變性并不真的適用于它們——當處理文件的時候略就,它們的狀態(tài)可能會修改捎迫,但是,這與Python的核心類型可比性限制不完全相同表牢。

④窄绒、“數(shù)字”包含了所有數(shù)字類型:整數(shù)、浮點數(shù)崔兴、復數(shù)颗祝、小數(shù)和分數(shù)浊闪。

⑤恼布、字符串包括str螺戳,以及Python3.0中的bytes和Python2.6中的unicode;Python3.0中的bytearray字符串類型是可變的折汞。

⑥倔幼、集合類似于一個無值的字典的鍵,但是它們不能映射為值爽待,并且沒有順序损同;因此,集合不是一個映射類型或者一個序列類型鸟款,frozenset是集合的一個不可變的版本膏燃。

對象靈活性

①、列表何什、字典和元組可以包含任何種類的對象组哩。

②、列表处渣、字典和元組可以任意嵌套伶贰。

③、列表和字典可以動態(tài)地擴大和縮小罐栈。

引用VS拷貝

引用是其他語言中指針的更高級模擬黍衙。

如果你的確需要拷貝,那么可以明確要求:

①荠诬、沒有限制條件的分片表達式(L[:])能夠復制序列琅翻。

②、字典copy方法(X.copy())能夠復制字典柑贞。

③方椎、有些內(nèi)置函數(shù)(例如,list)能夠生成拷貝(list(L))凌外。

④辩尊、copy標準庫模塊能夠生成完整的拷貝。

拷貝需要注意的是:無條件值的分片以及字典copy方法只能做頂層復制康辑。也就是說摄欲,不能夠復制嵌套的數(shù)據(jù)結(jié)構(gòu)。如果你需要一個深層嵌套的數(shù)據(jù)結(jié)構(gòu)的完整的疮薇、完全獨立的拷貝胸墙,那么就要使用標準的copy模塊——包括import copy語句,并編輯X=copy.deepcopy(Y)對任意嵌套對象Y做完整的復制按咒。

比較迟隅、相等性和真值

所有的Python對象也可以支持比較操作——測試相等性、相對大小等。

有兩種方法可以測試相等性:

①智袭、“==”操作符測試值的相等性奔缠。

②、“is”表達式測試對象的一致性吼野。

Python中不同的類型的比較方法:

①校哎、數(shù)字通過相對大小進行比較。

②瞳步、字符串是按照字典順序闷哆,一個字符接一個字符地對比進行比較。

③单起、列表和元組從左到右對每部分的內(nèi)容進行比較抱怔。

④、字典通過排序之后的(鍵嘀倒,值)列表進行比較屈留。

⑤、數(shù)字混合類型比較(例如括儒,1<'spam')在Python3.0中是錯誤的绕沈。

1、Python3.0的字典比較:

Python3.0中的比較的替代方法帮寻,要么編寫循環(huán)來根據(jù)鍵比較值乍狐,要么手動比較排序的鍵/值列表——items字典方法的和內(nèi)置的sorted足夠了。

2固逗、Python中真和假的含義:

①浅蚪、數(shù)字如果非零,則為真烫罩。
②惜傲、其他對象如果非空,則為真贝攒。

③盗誊、Python還有一個特殊對象:None,總被認為是假隘弊。

④哈踱、bool類型:

??????????? Ⅰ、當明確地用在真值測試時梨熙,True和False這些文字就變成了1和0开镣,但它們使得程序員的意圖更明確。

??????????? Ⅱ咽扇、交互模式下運行的布爾測試的結(jié)果打印成True和False的字樣邪财,而不是1和0陕壹,以使得程序的結(jié)果更明確。

Python還提供了一個內(nèi)置函數(shù)bool树埠,它可以用來測試一個對象的布爾值糠馆。

3、Python的類型層次:

Python系統(tǒng)中的任何東西都是對象類型弥奸,而且可以由Python程序來處理榨惠。

4、Type對象:

即使是類型本身在Python中也是對象類型盛霎。

對內(nèi)置函數(shù)type(X)能夠返回對象X的類型對象。

Python中的其他類型

1耽装、內(nèi)置類型陷阱:

2愤炸、賦值生成引用,而不是拷貝:

3掉奄、重復能夠增加層次深度:

4规个、留意循環(huán)數(shù)據(jù)結(jié)構(gòu):

5、不可變類型不可以在原處修改:

本章小結(jié)

我們在這一章學習了兩種主要核心的對象類型:元組和文件姓建。我們看到诞仓,元組支持所有一般的序列操作,但它們沒有方法速兔,因為是不可變的而不能進行任何在原處的修改墅拭。我們也看到,文件是內(nèi)置open函數(shù)返回的并且提供讀寫數(shù)據(jù)的方法涣狗。我們探討為了存儲到文件當中谍婉,如何讓Python對象來回轉(zhuǎn)換字符串,而我們也了解了pickle和struct模塊的高級角色(對象序列化和二進制數(shù)據(jù))镀钓。最后穗熬,我們復習了一些所有對象類型共有的特性(例如,共享引用)丁溅,討論對象領(lǐng)域內(nèi)常見的錯誤(“陷阱”)而完成這一章的內(nèi)容唤蔗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窟赏,隨后出現(xiàn)的幾起案子妓柜,更是在濱河造成了極大的恐慌,老刑警劉巖饰序,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件领虹,死亡現(xiàn)場離奇詭異,居然都是意外死亡求豫,警方通過查閱死者的電腦和手機塌衰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門诉稍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人最疆,你說我怎么就攤上這事杯巨。” “怎么了努酸?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵服爷,是天一觀的道長。 經(jīng)常有香客問我获诈,道長仍源,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任舔涎,我火速辦了婚禮笼踩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亡嫌。我一直安慰自己嚎于,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布挟冠。 她就那樣靜靜地躺著于购,像睡著了一般。 火紅的嫁衣襯著肌膚如雪知染。 梳的紋絲不亂的頭發(fā)上肋僧,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音持舆,去河邊找鬼色瘩。 笑死,一個胖子當著我的面吹牛逸寓,可吹牛的內(nèi)容都是我干的居兆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼竹伸,長吁一口氣:“原來是場噩夢啊……” “哼泥栖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勋篓,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吧享,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后譬嚣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钢颂,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年拜银,在試婚紗的時候發(fā)現(xiàn)自己被綠了殊鞭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遭垛。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖操灿,靈堂內(nèi)的尸體忽然破棺而出锯仪,到底是詐尸還是另有隱情,我是刑警寧澤趾盐,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布庶喜,位于F島的核電站,受9級特大地震影響救鲤,放射性物質(zhì)發(fā)生泄漏久窟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甘耿,春花似錦芽突、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至麸折,卻和暖如春锡凝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垢啼。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工窜锯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芭析。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓锚扎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親馁启。 傳聞我的和親對象是個殘疾皇子驾孔,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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