日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

《Head First Python》第六章--定制数据对象

發布時間:2025/3/16 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Head First Python》第六章--定制数据对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先上數據集:Head First Python 數據集

第六章的數據在第五章的基礎上加了兩個屬性:姓名和出生日期

james2.txt

James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16

????上一章的思路依然沒有問題,還是按照逗號拆分成列表,不過需要多出兩個變量來保存姓名和出生日期。如果對每個運動員都創建兩個變量,四個運動員就是8個變量,10個運動員就得20個變量,這并不合理。而且這些數據之間是有聯系的,它們都跟同一個人相關,列表也無法體現這種關聯性。

? ? 方法一:數據字典

? ? 首先我們采用Python內置的一種數據結構:字典,字典將鍵與數據相關聯,可以使內存中的數據和實際數據的結構保持一致。

? ? 創建字典的兩種方式:

????????一、james = {}

????? ? 二、james = dict()

? ? james['name'] = 'James Lee'? ?這就是字典中的一個鍵值對

下面是本章的第一種數據處理方法:

# 格式化字符串 def sanitize(time_string):if('-' in time_string):splitter = '-'elif(':' in time_string):splitter = ':'else:return (time_string)(mins, secs) = time_string.split(splitter)return (mins + '.' + secs)# 從文件讀取訓練數據 def get_coach_data(filename):# 創建一個字典接受返回值mydic = {}try:with open(filename) as myfile:# 把讀到的數據按','分隔成一個列表data = myfile.readline().strip().split(',')# 取前兩個數據(pop(0)刪除并返回最前面的數據項)mydic['name'] = data.pop(0)mydic['DOB'] = data.pop(0)# 對后面的數據進行格式化,并取最小的三個數據mydic['top3'] = str(sorted(set([sanitize(d) for d in data]))[0:3])except IOError as ioerr:# 文件異常print('File Error: ' + str(ioerr))return (None)# 返回字典return (mydic)# 輸出james的最好的三次數據 james = get_coach_data('james2.txt') print(james['name'] + "`s faster times are : " + james['top3'])# 輸出julie的最好的三次數據 julie = get_coach_data('julie2.txt') print(julie['name'] + "`s faster times are : " + julie['top3'])# 輸出mikey的最好的三次數據 mikey = get_coach_data('mikey2.txt') print(mikey['name'] + "`s faster times are : " + mikey['top3'])# 輸出sarah的最好的三次數據 sarah = get_coach_data('sarah2.txt') print(sarah['name'] + "`s faster times are : " + sarah['top3'])

運行結果如圖:


方法二:定義一個類,利用類對象來體現數據結構關系

? ? Python使用class定義類。每個定義的類都有一個特殊的方法,名為__init__(),可以通過這個方法控制如何初始化對象。

? ? 類中的和函數的定義類似,同樣是使用def來定義。

? ? Python要求每個方法的第一個參數為調用對象實例,也就是說每個方法的第一個參數都是self。

這樣我們就可以對運動員數據進行封裝:

class Athlete:# 構造方法,至少要提供一個name值def __init__(self, a_name, a_dob=None, a_times=[]):self.name = a_nameself.dob = a_dobself.times = a_times# 獲取最快的三次記錄def top3(self):return (str(sorted(set([sanitize(d) for d in self.times]))[0:3]))

Athlete類包含三個屬性,其中name屬性是必須提供的,dob和times是缺省的。

完整代碼如下:

class Athlete:# 構造方法,至少要提供一個name值def __init__(self, a_name, a_dob=None, a_times=[]):self.name = a_nameself.dob = a_dobself.times = a_times# 獲取最快的三次記錄def top3(self):return (str(sorted(set([sanitize(d) for d in self.times]))[0:3]))# 格式化字符串 def sanitize(time_string):if('-' in time_string):splitter = '-'elif(':' in time_string):splitter = ':'else:return (time_string)(mins, secs) = time_string.split(splitter)return (mins + '.' + secs)# 從文件讀取訓練數據 def get_coach_data(filename):try:with open(filename) as myfile:# 把讀到的數據按','分隔成一個列表data = myfile.readline().strip().split(',')# 返回一個Athlete對象return (Athlete(data.pop(0), data.pop(0), data))except IOError as ioerr:# 文件異常print('File Error: ' + str(ioerr))return (None)james = get_coach_data('james2.txt') print(james.name + "`s faster times are : " + james.top3())julie = get_coach_data('julie2.txt') print(julie.name + "`s faster times are : " + julie.top3())mikey = get_coach_data('mikey2.txt') print(mikey.name + "`s faster times are : " + mikey.top3())sarah = get_coach_data('sarah2.txt') print(sarah.name + "`s faster times are : " + sarah.top3())

? ? 運行結果如圖:


????對于運動員來說,每次訓練完都會有新的數據產生,如果要想把新的數據添加進去,就需要寫新的方法來做這件事(Python中屬性是私有的,外部不可直接訪問修改,而方法是公有的,所以可以通過方法來修改數據)。

? ? 面對這種情況,我們介紹第三種處理數據的方法:繼承內置類

? ? 其實,到我們封裝成類之后,Athlete的times還是用list來存儲的,既然是對times的修改,那么我們能不能繼承list呢?這樣就可以使用list的方法,append,extend等。

類繼承:

class AthleteList(list):def __init__(self, a_name, a_dob=None, a_times=[]):list.__init__([])self.name = a_nameself.dob = a_dobself.extend(a_times)# 獲取最快的三次記錄def top3(self):return (str(sorted(set([sanitize(d) for d in self]))[0:3]))

????AthleteList繼承自list,比list多了兩個屬性name和dob,而訓練數據直接用AthleteList自身(從list那繼承過來的屬性)來存儲。

完整代碼:

class AthleteList(list):def __init__(self, a_name, a_dob=None, a_times=[]):list.__init__([])self.name = a_nameself.dob = a_dobself.extend(a_times)# 獲取最快的三次記錄def top3(self):return (str(sorted(set([sanitize(d) for d in self]))[0:3]))# 格式化字符串 def sanitize(time_string):if('-' in time_string):splitter = '-'elif(':' in time_string):splitter = ':'else:return (time_string)(mins, secs) = time_string.split(splitter)return (mins + '.' + secs)# 從文件讀取訓練數據 def get_coach_data(filename):try:with open(filename) as myfile:# 把讀到的數據按','分隔成一個列表data = myfile.readline().strip().split(',')# 返回一個Athlete對象return (AthleteList(data.pop(0), data.pop(0), data))except IOError as ioerr:# 文件異常print('File Error: ' + str(ioerr))return (None)james = get_coach_data('james2.txt') james.append('2.00') print(james.name + "`s faster times are : " + james.top3())julie = get_coach_data('julie2.txt') julie.extend(['2-13', '2:18']) print(julie.name + "`s faster times are : " + julie.top3())mikey = get_coach_data('mikey2.txt') print(mikey.name + "`s faster times are : " + mikey.top3())sarah = get_coach_data('sarah2.txt') print(sarah.name + "`s faster times are : " + sarah.top3())

代碼中還順便測了下從list哪兒繼承過來的方法append和extend。

運行結果如圖:



BULLET POINTS:

  • 使用dict()工廠函數或{}可以創建一個空字典
  • 要訪問一個名為person的字典中與鍵Name關聯的值,可以使用我們熟悉的中括號記法:person['Name']
  • 類似于列表和集合,Python的字典會隨著新數據增加到這個數據結構中而動態擴大。
  • 可以創建一個空字典然后增加數據,也可以一次完成操作。
  • 可以用class關鍵字定義一個類。
  • 類方法(代碼)與函數的定義基本相同,也就是說,要用def定義。
  • 類屬性(數據)就像是對象實例中的變量。
  • 可以類中定__init__()方法來初始化對象實例。
  • 類中定義的每個方法都必須有self,從而將數據于其實例相關聯。

總結

以上是生活随笔為你收集整理的《Head First Python》第六章--定制数据对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产不卡在线观看 | 久久精品69 | 欧美精品四区 | 国产剧情在线观看 | 国产另类ts人妖一区二区 | 国产精品嫩草69影院 | 亚洲一区二区三区免费视频 | 亚洲天堂中文字幕在线 | 伊朗做爰xxxⅹ性视频 | 欧美少妇一区 | 91资源在线播放 | 国产又黄又粗 | 日韩成人免费在线视频 | 日韩中文字幕影院 | av自拍一区 | 欧美一级全黄 | 国产尤物在线视频 | 催眠美妇肉奴系统 | 国产微拍一区 | 亚洲成人乱码 | 国产高清一区 | 久久天堂av | 一区二区三区四区五区六区 | 色屁屁www | 男人天堂免费视频 | 久草青青视频 | 又大又长粗又爽又黄少妇视频 | 日韩高清片 | h网站免费在线观看 | 亚洲国产精品久久久久 | 在线看黄的网站 | 操她视频在线观看 | 69xx视频在线观看 | 午夜影院免费观看 | 天天噜 | 欧美xxxx网站 | 特级西西444www大精品视频 | 97色伦图片 | 麻豆福利视频 | 台湾一级视频 | 国产永久免费视频 | 国产大片中文字幕在线观看 | 日韩欧美一级在线 | 91国模 | 伊人久久大香线蕉av一区 | 亚洲高清av| 性色一区 | japanese在线观看 | 天天色影院 | 动漫av网站 | 欧美成人猛片aaaaaaa | 日韩va中文| 亚洲精品美女 | 粉嫩久久99精品久久久久久夜 | 伊人视频在线观看 | 国产三级三级看三级 | 红桃视频成人在线 | 女裸全身无奶罩内裤内衣内裤 | 成人免费在线观看网站 | 欧美色乱| 免费看国产视频 | 亚洲高清不卡 | 福利在线一区 | 成人做爰69片免费看 | 免费大片黄在线观看视频网站 | 波多野结衣中文字幕在线播放 | 亚洲成熟丰满熟妇高潮xxxxx | 国产又粗又猛视频 | 黑人操白妞 | 99re在线观看| 国产又粗又大又爽视频 | 日韩影视一区 | 人乳videos巨大吃奶 | 狠狠干天天 | 99视频在线观看免费 | 好吊视频一区二区三区四区 | 美女毛片在线 | jizz中国少妇高潮出水 | 亚洲欧美中文日韩在线观看 | 少妇aa| 天天5g天天爽免费观看 | 国产精品久久久久久三级 | 成人app在线 | 欧美色妞网| 中文字幕高清在线免费播放 | 人体私拍套图hdxxxx | 欧美日韩精选 | 青青草国产在线播放 | 成人 黄 色 免费播放 | 日韩精品一区二区亚洲av | 欧美日韩亚洲一区二区 | 日韩福利小视频 | 香蕉视频在线观看网站 | 中文字幕无码人妻少妇免费 | 影音先锋亚洲一区 | 久久一区av| 日韩专区在线播放 | 欧美一级在线免费 | 精品人妻少妇AV无码专区 |