久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python從零單排,!按照這進(jìn)度,!不出兩月我就能拿到8K了!

 ly88 2018-09-21

既然Python是一門面向?qū)ο蟮木幊陶Z(yǔ)言,,那么今天我們著重講一下如何處理'對(duì)象'


一,、文件

之前接觸到的一系列數(shù)據(jù)值,都是在內(nèi)存中的,,也就是不會(huì)永久保存,。當(dāng)數(shù)據(jù)量非常小的時(shí)候,,當(dāng)然可以每次都臨時(shí)定義生成,但如果數(shù)據(jù)量稍大,,這樣處理就不合適了,。結(jié)合我們平時(shí)使用電腦的習(xí)慣,其實(shí)大部分?jǐn)?shù)據(jù)都是以“文件”式存在于硬盤里的,,比如.avi.torrent,.exe.txt等,。

1.open函數(shù)

利用python的內(nèi)置函數(shù)open()可以執(zhí)行打開(kāi)文件的操作,對(duì)于一些python的數(shù)據(jù)科學(xué)庫(kù)像numpy和panda有自己的文件讀取函數(shù),。下面我們通過(guò)一個(gè)簡(jiǎn)單的例子展示一下:

open('hope.txt', 'r')

open函數(shù)與我們之前介紹的print函數(shù)不同,,接受了兩個(gè)參數(shù),參數(shù)之間以逗號(hào)隔開(kāi),。

  • 'hope.txt':目標(biāo)文件名,,字符串類型;

  • 'r':打開(kāi)模式,,'r'代表“只讀”(read),。另有'w'表示“寫(xiě)入”(write),'a'表示“增補(bǔ)”(append),。

  • 但是open函數(shù)并不會(huì)顯示文件的內(nèi)容,比如看下面的這個(gè)例子:


當(dāng)你運(yùn)行這段代碼將會(huì)得到

<_io.textiowrapper name='taijian.txt' mode='r' encoding='UTF-8'>

根據(jù)輸出可見(jiàn),,f變量并不是文本內(nèi)容,其類型是TextIOWrapper,,內(nèi)容包含文件名name,,打開(kāi)方式mode和編碼格式encoding三個(gè)參數(shù)。這里我們只指定了前兩個(gè)參數(shù),,所以encoding就是默認(rèn)值UTF-8,如果想要得到文件的內(nèi)容,,還有進(jìn)一步工作要做,。

2.read函數(shù)

為了得到文本內(nèi)容,我們需要調(diào)用.read()函數(shù),,就像這樣,。

novel = f.read() 同時(shí)運(yùn)用len函數(shù)可以統(tǒng)計(jì)文件內(nèi)的字?jǐn)?shù)

二、函數(shù)

函數(shù)就是一系列語(yǔ)句的集合封裝,,這樣每次就不需要重復(fù)寫(xiě)出所有語(yǔ)句,,只需要通過(guò)函數(shù)的名稱調(diào)用就方便多了。其實(shí)我們已經(jīng)多次用到函數(shù)了,,比如 type()函數(shù),,我們給它一個(gè)“輸入”,比如一個(gè)數(shù)字 1,,函數(shù)會(huì)返回這個(gè)數(shù)字對(duì)應(yīng)的類型(type)給你,。這里會(huì)介紹如何定義自己的函數(shù),,來(lái)實(shí)現(xiàn)更加靈活的功能。

我們以口袋妖怪威為例,,數(shù)據(jù)來(lái)源于Kaggle,。

  • #:口袋妖怪編號(hào)

  • Name:你的名字

  • Type1:第一屬性,決定防御抗性

  • Type2:第二屬性

  • Total:基本屬性值之和

  • HP:血

  • Attack:攻

  • Defense:受

  • SP Atk:特攻

  • SP Def:特受

  • Speed:速度

  • Generation:登場(chǎng)的作品代數(shù)

  • Legendary:是否為傳說(shuō)精靈

為了便于讀取,,我們將所有的數(shù)據(jù)存為csv文件,。Pokemon.csv

csv(comma separated values)是結(jié)構(gòu)化數(shù)據(jù),同一行的值之間以逗號(hào)(,)分隔,,行之間用換行符( )分隔,。(注意n之前的轉(zhuǎn)移符

練習(xí)題一

為便于處理,我們將數(shù)據(jù)集轉(zhuǎn)換為二維數(shù)組(嵌套列表),,這也是對(duì)之前“循環(huán)”,、“列表”等內(nèi)容的回顧。當(dāng)然,,如果有Pandas等數(shù)據(jù)科學(xué)庫(kù)的幫助,,這些過(guò)程可以更加簡(jiǎn)潔,這里主要是為了加強(qiáng)編程練習(xí),。

文件pokemon.csv已經(jīng)打開(kāi)并存為變量f,。

  • 讀取文件內(nèi)容,賦值給data

  • data按行分割成列表,,賦值給mons

  • 遍歷mons的每一行,,按逗號(hào)分割,添加到mons_data

  • mons_data應(yīng)是二維嵌套列表,,每個(gè)元素都是一只口袋妖怪的屬性列表,。


答案:

data = f.read()
mons = data.split('')
for i in mons:
mons_data.append(i.split(','))

如果有一個(gè)函數(shù),只要指定目標(biāo)csv文件,,就可以直接生成二維數(shù)組,,豈不美哉?但是Python并沒(méi)有內(nèi)置這樣的功能,,那就需要定義自己的函數(shù),。函數(shù)定義的關(guān)鍵字是def,也就是'define'的縮寫(xiě),。定義語(yǔ)句格式與for循環(huán)有些類似,,同樣包括語(yǔ)句頭和語(yǔ)句體,需要特別注意的仍然是語(yǔ)句頭結(jié)尾的冒號(hào)(:)和語(yǔ)句體的縮進(jìn):


我們希望能夠有一個(gè)函數(shù),,讀取指定的csv文件,,返回經(jīng)過(guò)切分的二維數(shù)組,那么這個(gè)函數(shù)應(yīng)該是這樣的:


  • 函數(shù)名:tokenize,,想要調(diào)用這個(gè)自定義函數(shù)的時(shí)候,,直接寫(xiě)tokenize()即可,,就像我們使用print()type()一樣。

  • 參數(shù):想要處理的數(shù)據(jù)文件名,,對(duì)于Dota2的例子,,就是dota2_heroes.csv

  • 函數(shù)體:也就是上一節(jié)所寫(xiě)的代碼段,,為了函數(shù)更加通用,,我修改了部分變量名稱。

  • 返回值:關(guān)鍵字return之后是經(jīng)過(guò)函數(shù)得到的結(jié)果,。

三,、類和對(duì)象

(class)描述和規(guī)范了某一類事物的特征和行為。比如有一個(gè)類,,叫“車”,。那么這個(gè)類就描述了一種物體的特征和行為,特征比如有輪子,,行為比方說(shuō)會(huì)移動(dòng),。車這個(gè)類好比一張藍(lán)圖,各種各樣的車都是根據(jù)車的基本特征設(shè)計(jì)制造出來(lái)的,。

“類”的概念是抽象的,,我們雖然修過(guò)了一輛輛車,但不會(huì)真的關(guān)注“車”作為類的本質(zhì)等哲♂學(xué)命題,。具體到某一輛車就是對(duì)象(object),,對(duì)象是類的實(shí)例,如果說(shuō)類是藍(lán)圖,,對(duì)象就是把一張藍(lán)圖繪到底,。

Python是一門面向?qū)ο?/span>的編程語(yǔ)言,可以說(shuō)在Python中所有東西都是對(duì)象(你們有對(duì)象了嗎,?),,比如intstrbool這些我們已經(jīng)見(jiàn)過(guò)的數(shù)據(jù)類型,甚至模塊,、函數(shù),全都是對(duì)象,。這個(gè)按照藍(lán)圖造車的過(guò)程,,就叫類的實(shí)例化。你擁有的車就是類的實(shí)例,,即對(duì)象,。所以說(shuō),要有對(duì)象,,首先要定義類,。

如何定義一個(gè)類呢,?

和定義函數(shù)一樣,定義類也是一個(gè)“語(yǔ)句頭+語(yǔ)句體”組成的復(fù)合語(yǔ)句,,用到的關(guān)鍵字是class,。定義一個(gè)名為 Creature 的類,其語(yǔ)法結(jié)構(gòu)如圖:


類的名稱跟在class關(guān)鍵詞之后,,和冒號(hào)(:)之前,。類用實(shí)例變量(instance variable)來(lái)存儲(chǔ)數(shù)據(jù),以及方法(method)來(lái)定義行為,。關(guān)于超類的概念不必驚慌,,下一章就會(huì)詳細(xì)講解,沒(méi)有超類的情況下,,類名之后的括號(hào)也可以省略,。

為了使定義的過(guò)程看上去盡可能簡(jiǎn)單,語(yǔ)句體中只有一個(gè) pass,,也就是什么也不做的意思,。

一般的類還會(huì)包含:

  • 方法:用來(lái)定義行為

  • 實(shí)例變量:存儲(chǔ)數(shù)據(jù)

什么是方法?

方法描述了對(duì)象的行為,,本質(zhì)上它是定義在類中的函數(shù),。調(diào)用對(duì)象方法的過(guò)程,和我們之前在函數(shù)一章中調(diào)用函數(shù)是相似的,,比如對(duì)于字符串對(duì)象,,想要調(diào)用.split()方法來(lái)進(jìn)行分割(#號(hào)后面的就是輸出結(jié)果):


在之前的章節(jié)習(xí)題中,我們已經(jīng)接觸過(guò)了類的相關(guān)的用法,。假設(shè)現(xiàn)有類Person,,含有了一個(gè)方法,叫做 whoami,,用于返回對(duì)象的名字,。那我們調(diào)用這個(gè)方法的過(guò)程是這樣的:


其實(shí)上面這個(gè)程序 Trevor = Person() 這一行,不管你把 kaiser 改成什么,,輸出的都是我的名字,。顯然,這個(gè) whoami 方法是有問(wèn)題的,。

如果你把類語(yǔ)句體里的 'Trevor' 改成別的內(nèi)容,,那就會(huì)輸出別的內(nèi)容。但我們需要的是輸出這個(gè) Person 對(duì)象的名字,,大家的名字都不相同,,怎么做呢?這就需要類 Person 能夠存儲(chǔ)數(shù)據(jù),,也就是要有實(shí)例變量,。

實(shí)例變量

介紹實(shí)例變量之前,,先介紹一下初始化器initializerconstructor)。Python 的類都自帶有一些特殊的方法,,它就是其中之一,。

初始化器的“初始化”,指的是對(duì)象的初始化,,其實(shí)也就是類的實(shí)例化,。如果我們要在實(shí)例化Person 的時(shí)候,給它一個(gè)名字,,可以加在實(shí)例化時(shí)的括號(hào)里,。

初始化器的方法名長(zhǎng)這樣:__init__。別怕下劃線,,這只是為了標(biāo)明些方法的特殊性,。

定義初始化器和平時(shí)定義方法是一樣的,我們需要把這個(gè)人的名字傳入到初始化器,。那么初始化器應(yīng)該這樣定義:


哦,,在這停頓!這里出現(xiàn)的 self.name,,就是我們的實(shí)例變量,。實(shí)例變量的用途(第三次提起)是存儲(chǔ)數(shù)據(jù),那么這里我們是存儲(chǔ)了名字,。這樣實(shí)現(xiàn)過(guò)初始化器之后,,就可以實(shí)例化Person ,并賦予它一個(gè)名字了,。

Python的所有方法,,其第一個(gè)參數(shù)都是self,這個(gè)參數(shù)指代的是調(diào)用該方法的對(duì)象,。調(diào)用方法時(shí),,不需要傳入self參數(shù),Python解釋器會(huì)自動(dòng)完成這一步,。對(duì)象的實(shí)例變量可以在生成后修改,,但是并不推薦這樣做,所以實(shí)踐當(dāng)中最好隱藏變量對(duì)外的接口,。在實(shí)際的開(kāi)發(fā)中經(jīng)常會(huì)遇到這種情況:我們不希望對(duì)象的某些實(shí)例變量被訪問(wèn)和修改,。為此需要隱藏這些實(shí)例變量,即定義私有實(shí)例變量,。在Python中,以兩條下劃線(__)開(kāi)頭的變量,,就是私有實(shí)例變量,。方法同樣可以定義為私有,,也是以兩條下劃線(__)開(kāi)頭。

四,、繼承與派生

繼承(inheritance)使得開(kāi)發(fā)者可以先創(chuàng)建一個(gè)較為寬泛的類,,再逐步拓展細(xì)化成為更具體的類,就好比先定義“動(dòng)物”,,再繼承得出“哺乳動(dòng)物”,。

通過(guò)繼承,我們可以訪問(wèn)所有的數(shù)據(jù)域(實(shí)例變量)和方法,,此外還可以加入我們自己的變量和方法,。繼承提供了一種組織代碼的方式,這樣就不用每次都從零重寫(xiě),,極大地提高了編碼效率,,也是一種更好的代碼風(fēng)格。如果類Y繼承了類X,,那么X叫作“超類”(super class)或“基類”(base class),,Y叫作“子類”(subclass)或“派生類”(derived class)。其實(shí)就是父子關(guān)系:

創(chuàng)建子類的語(yǔ)法:


之前我們定義過(guò)的類如Person,,類名之后都是沒(méi)有括號(hào)的,,因?yàn)樗麄儾](méi)有繼承其他超類。

與C#, Java這些語(yǔ)言不同,,Python允許多重繼承,,也就是可以認(rèn)好幾個(gè)爹:


最后,今天來(lái)一波毒雞湯


小編在此謝謝大家的觀看,!Python很容易學(xué),!所以小編有弄一個(gè)交流,互問(wèn)互答,,資源共享的交流學(xué)習(xí)基地,,如果你也是Python的學(xué)習(xí)者或者大牛都?xì)g迎你來(lái)!?:548+377+875,!一起 學(xué)習(xí)共同進(jìn)步,!


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多