如果我們有很多Python項目,不同的項目可能需要不同版本的模塊,另外,模塊之間也可能存在不同的依賴(lài)關(guān)系,如果我們將所有開(kāi)發(fā)都在全局開(kāi)發(fā)環(huán)境下進(jìn)行,勢必會(huì )導致依賴(lài)的混亂。所以使用虛擬環(huán)境很有必要。以下是小編為你整理的要學(xué)python怎么學(xué) ?
本文假設你已經(jīng)安裝了Python,如果沒(méi)有請參考我的另一篇文章 ?
sudo pip3 install virtualenv virtualenvwrapper ?
sudo rm -rf ~/.cache/pip
# virtualenv and virtualenvwrapper ?
export WORKON_HOME=$HOME/.virtualenvs ?
source /usr/local/bin/virtualenvwrapper.sh ?
echo -e "n# virtualenv and virtualenvwrapper" >> ~/.profile ?
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile ?
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile ?
source ~/.profile ?
接下來(lái),我們來(lái)創(chuàng )建我們將用于計算機視覺(jué)開(kāi)發(fā)的Python虛擬環(huán)境 ?
mkvirtualenv cv -p python2 ?
該命令將使用Python 2.7創(chuàng )建一個(gè)名為cv的新Python虛擬環(huán)境 。 ?
如果您想使用Python 3,則需要使用此命令: ?
mkvirtualenv cv -p python3 ?
執行下面命令進(jìn)入虛環(huán)境進(jìn)行環(huán)境搭建和開(kāi)發(fā) ?
source ~/.profile ?
workon cv ?
爬郵箱的方法如果不會(huì )在Eclipse中配置搭建Python開(kāi)發(fā)環(huán)境,請大家先參考本人另一篇百度經(jīng)驗——Eclipse+PyDev配置搭建Python開(kāi)發(fā)環(huán)境(http://jingya請把中文刪掉n.baidu.com/article/cd4c2979101f02756f6e6064.html) ?
如果不會(huì )用Eclipse編寫(xiě)和運行Python程序,請大家參考本人另一篇百度經(jīng)驗——Python入門(mén)基礎教程 用Eclipse編寫(xiě)Python程序(http://jingya請把中文刪掉n.baidu.com/article/1876c8529e8de0890b1376a9.html) ?
這里用的是qq郵箱,請把下圖程序代碼中紅色部分換成自己qq郵箱的帳號密碼,發(fā)送郵箱和接收郵箱可以為同一郵箱 ?
運行,結果不出所料,報錯 ?
這,用戶(hù)被鎖定,這是什么情況,百度的繼續。說(shuō)是郵件服務(wù)器不配套,將代碼再三查看,額,我用的是qq郵箱,而服務(wù)器是smtp.163.com的,這是兩家人,不能互相串通勾結 ?
類(lèi)的繼承
在類(lèi)的繼承中,如果重定義某個(gè)方法,該方法會(huì )覆蓋父類(lèi)的同名方法,但有時(shí),我們希望能同時(shí)實(shí)現父類(lèi)的功能,這時(shí),我們就需要調用父類(lèi)的方法了,可通過(guò)使用 super 來(lái)實(shí)現,比如: ?
在上面,Animal 是父類(lèi),Dog 是子類(lèi),我們在 Dog 類(lèi)重定義了 greet 方法,為了能同時(shí)實(shí)現父類(lèi)的功能,我們又調用了父類(lèi)的方法,看下面的使用: ?
super 的一個(gè)最常見(jiàn)用法可以說(shuō)是在子類(lèi)中調用父類(lèi)的初始化方法了,比如: ?
深入 super() ?
看了上面的使用,你可能會(huì )覺(jué)得 super 的使用很簡(jiǎn)單,無(wú)非就是獲取了父類(lèi),并調用父類(lèi)的方法。其實(shí),在上面的情況下,super 獲得的類(lèi)剛好是父類(lèi),但在其他情況就不一定了,super 其實(shí)和父類(lèi)沒(méi)有實(shí)質(zhì)性的關(guān)聯(lián)。 ?
讓我們看一個(gè)稍微復雜的例子,涉及到多重繼承,代碼如下: ?
其中,Base 是父類(lèi),A, B 繼承自 Base, C 繼承自 A, B,它們的繼承關(guān)系如下:
?
現在,讓我們看一下使用: ?
如果你認為 super 代表『調用父類(lèi)的方法』,那你很可能會(huì )疑惑為什么 enter A 的下一句不是 enter Base 而是 enter B。原因是,super 和父類(lèi)沒(méi)有實(shí)質(zhì)性的關(guān)聯(lián),現在讓我們搞清 super 是怎么運作的。 ?
事實(shí)上,對于你定義的每一個(gè)類(lèi),Python 會(huì )計算出一個(gè)方法解析順序(Method Resolution Order, MRO)列表,它代表了類(lèi)繼承的順序,我們可以使用下面的方式獲得某個(gè)類(lèi)的 MRO 列表: ?
那這個(gè) MRO 列表的順序是怎么定的呢,它是通過(guò)一個(gè) C3 線(xiàn)性化算法來(lái)實(shí)現的,這里我們就不去深究這個(gè)算法了,感興趣的讀者可以自己去了解一下,總的來(lái)說(shuō),一個(gè)類(lèi)的 MRO 列表就是合并所有父類(lèi)的 MRO 列表,并遵循以下三條原則: ?
---子類(lèi)永遠在父類(lèi)前面 ?
---如果有多個(gè)父類(lèi),會(huì )根據它們在列表中的順序被檢查 ?
---如果對下一個(gè)類(lèi)存在兩個(gè)合法的選擇,選擇*個(gè)父類(lèi) ?
如何輸出程序
打開(kāi)python編輯器,輸出主要用到的函數是print,和c語(yǔ)言的printf不同.輸出是屏幕打印一行話(huà)需要再函數后面的括號中,輸入你需要打印的字符串,用'XXXX'形式輸出。符號都需要用英文符號。點(diǎn)擊CTRL+s,然后按F5運行代碼,屏幕上就打印出這一句話(huà)。引號是不輸出的。漢字同樣也可以輸出。 ?
不妨試一下printf,按照同樣的格式輸出,系統會(huì )提示printf沒(méi)有定義,說(shuō)明python中的函數和C語(yǔ)言中的函數還是有差別的。print函數中括號內部使用雙引號也是可以正常打印出字符串的。 ?
print也可以打印多個(gè)字符串,中間如果用逗號隔開(kāi),系統默認使用空格輸出。與c語(yǔ)言相同的是python同樣可以使用n轉移序列來(lái)實(shí)現換行輸出。如果字符串中有很多的換行,可以使用另外一種方法達到換行效果。使用'''開(kāi)頭,*'''結束。注意輸出的縮進(jìn)和格式。 ?
如果需要輸出一些特殊符號或者特殊格式,大家可以自己設計,輸出一行好看的標題可以試著(zhù)自己寫(xiě)一下代碼。輸出一行*號和文字,輸出一行*號一行文字再加上一行*號,輸出一個(gè)金字塔格式的符號。自己也可以設計其他漂亮的圖案輸出。