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