【Python學習】python學習手冊--第九章 元組,文件及其它

元組

元組由簡單的對象構成,與列表非常相似,但是元組是不能在原處修改的(它們是不可變的)。元組也不支持任何方法的調用,但是具有列表的大多數屬性。
元組的主要特性:

  • 任意對象的有序序列
  • 通過偏移存取
  • 屬於不可變序列類型,與列表不一樣,元組不支持原處修改
  • 固定長度、異構、任意嵌套
  • 對象引用的數組:與列表相似,元組看成是對象引用組成的數組

元組基本操作

>>> (1,2,3,4)+(5,6,7,8)
(1, 2, 3, 4, 5, 6, 7, 8)
>>> (1,2,3,4)*4
(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
>>> T = (1,2,3,4)+(5,6,7,8)
>>> T[1:4]                                      #與列表相似,支持偏移量引用
(2, 3, 4)
>>> T[2]  
3 
>>> x=(40)                         #只是聲明瞭一個整數
>>> x
40
>>> y=(40,)                        #這裏加個逗號,就聲明爲元組
>>> y
(40,)
>>> 

因爲元組具有不可變性,在轉化類型的過程中,都是使用內置方法,這些方法會返回一個新的對象,不會改變原來的元組對象。當然元組的不可變性只適用於對象的頂層而嵌套中的元素有可能是可變的,例如元組中的列表是可變的

>>> T=('a','b','z','c','d')
>>> sorted(T)
['a', 'b', 'c', 'd', 'z']
>>> list(T)
['a', 'b', 'z', 'c', 'd']
>>> 

元組的不可變形性提供了編程過程中的某些完整性,可以確保元組在程序中不會被另一個引用修改。而列表就無法做到這一點了。

文件

Python內置open函數,會創建一個文件對象,可以作爲計算機上的一個文件鏈接,在調用open之後,你可以通過調用返回文件對象的方法來讀取相關文件信息。
在Python中,文件對象只是常見文件處理任務輸出模塊。

這裏寫圖片描述

文件使用

  • 文件迭代器是最好的讀取文件行的工具
  • 內容是字符串,不是對象。用迭代器返回的數據都是一個字符串。
  • close是通常選項:調用文件close方法將會終止對外部文件的鏈接。Python是有自動回收內存空間的機制,但是這不是意味着不需要手動關閉文件。
  • 文件是緩衝的並且是可查找的,文件的輸出總是先緩衝的,這就意味着並不是實時進入硬盤中的文件的。需要使用flush函數把緩衝區的內容寫入文件中。
  • 由於從文件中讀取內容都是字符串的類型,在正式使用之前,都要進行類型的轉換。(eval函數可以將字符串當作可執行代碼來執行)
  • 一些文件可能是打包的二進制數據文件,用’wb’模式打開它,struct模塊能夠構造並解析打包的二進制數據。某種意義上來說,它還可以將字符串轉換爲二進制文件。

pickle存儲Python的原生對象

eval函數可以將任何字符串當作python命令來執行,哪怕它有可能是刪除文件的命令。當無法確認文件來源時,可以使用pickle來存儲python原生對象:

>>> import pickle
>>> D={'a':1,'b':2,'c':3}
>>> F=open("datafile.pkl",'wb')
>>> pickle.dump(D,F)
>>> F.close()
>>> F1=open("datafile.pkl",'rb')
>>> D1=pickle.load(F1)
>>> D1                         #可以直接從文件中讀取python的原生對象
{'c': 3, 'b': 2, 'a': 1}
>>> 

文件上下文管理器

可以用with…as…的語法來保證在執行完一個代碼片段後,自動關閉文件。
也可以用try/finally 語句來達到相同的效果。

with open(r'c:\misc\data.txt') as myfile:
       for line in myfile:
         ... use code here ...         #with/as代碼塊執行完成之後,會自動關閉myfil文件

或者

myfile=open(r'c:\misc\data.txt')
try:
   for line in myfile:
      ...use code here
finally:
   myfile.close()

類型分類總結

總結一下Python核心類型使用時候的一些注意點:

  • 對象根據分類來共享操作,比如如果都是序列一類,則都可以進行分配或索引之類的序列操作
  • 可變對象可以在對象原處修改,而不可變對象則不行
  • 在Python3.0中的bytearray字符串類型是可變的
  • 集合類似於一個沒有值只有鍵的字典,它們不能映射爲某個值,並且像字典一樣沒有順序。因此集合不是一個映射類型或者一個序列類型。

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章