如果我們有很多Python項(xiàng)目,不同的項(xiàng)目可能需要不同版本的模塊,另外,模塊之間也可能存在不同的依賴關(guān)系,如果我們將所有開發(fā)都在全局開發(fā)環(huán)境下進(jì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)建我們將用于計(jì)算機(jī)視覺開發(fā)的Python虛擬環(huán)境 ?
mkvirtualenv cv -p python2 ?
該命令將使用Python 2.7創(chuàng)建一個(gè)名為cv的新Python虛擬環(huán)境 。 ?
如果您想使用Python 3,則需要使用此命令: ?
mkvirtualenv cv -p python3 ?
執(zhí)行下面命令進(jìn)入虛環(huán)境進(jìn)行環(huán)境搭建和開發(fā) ?
source ~/.profile ?
workon cv ?
爬郵箱的方法如果不會在Eclipse中配置搭建Python開發(fā)環(huán)境,請大家先參考本人另一篇百度經(jīng)驗(yàn)——Eclipse+PyDev配置搭建Python開發(fā)環(huán)境(http://jingya請把中文刪掉n.baidu.com/article/cd4c2979101f02756f6e6064.html) ?
如果不會用Eclipse編寫和運(yùn)行Python程序,請大家參考本人另一篇百度經(jīng)驗(yàn)——Python入門基礎(chǔ)教程 用Eclipse編寫Python程序(http://jingya請把中文刪掉n.baidu.com/article/1876c8529e8de0890b1376a9.html) ?
這里用的是qq郵箱,請把下圖程序代碼中紅色部分換成自己qq郵箱的帳號密碼,發(fā)送郵箱和接收郵箱可以為同一郵箱 ?
運(yùn)行,結(jié)果不出所料,報(bào)錯 ?
這,用戶被鎖定,這是什么情況,百度的繼續(xù)。說是郵件服務(wù)器不配套,將代碼再三查看,額,我用的是qq郵箱,而服務(wù)器是smtp.163.com的,這是兩家人,不能互相串通勾結(jié) ?
類的繼承
在類的繼承中,如果重定義某個(gè)方法,該方法會覆蓋父類的同名方法,但有時(shí),我們希望能同時(shí)實(shí)現(xiàn)父類的功能,這時(shí),我們就需要調(diào)用父類的方法了,可通過使用 super 來實(shí)現(xiàn),比如: ?
在上面,Animal 是父類,Dog 是子類,我們在 Dog 類重定義了 greet 方法,為了能同時(shí)實(shí)現(xiàn)父類的功能,我們又調(diào)用了父類的方法,看下面的使用: ?
super 的一個(gè)最常見用法可以說是在子類中調(diào)用父類的初始化方法了,比如: ?
深入 super() ?
看了上面的使用,你可能會覺得 super 的使用很簡單,無非就是獲取了父類,并調(diào)用父類的方法。其實(shí),在上面的情況下,super 獲得的類剛好是父類,但在其他情況就不一定了,super 其實(shí)和父類沒有實(shí)質(zhì)性的關(guān)聯(lián)。 ?
讓我們看一個(gè)稍微復(fù)雜的例子,涉及到多重繼承,代碼如下: ?
其中,Base 是父類,A, B 繼承自 Base, C 繼承自 A, B,它們的繼承關(guān)系如下: ?
?
現(xiàn)在,讓我們看一下使用: ?
如果你認(rèn)為 super 代表『調(diào)用父類的方法』,那你很可能會疑惑為什么 enter A 的下一句不是 enter Base 而是 enter B。原因是,super 和父類沒有實(shí)質(zhì)性的關(guān)聯(lián),現(xiàn)在讓我們搞清 super 是怎么運(yùn)作的。 ?
事實(shí)上,對于你定義的每一個(gè)類,Python 會計(jì)算出一個(gè)方法解析順序(Method Resolution Order, MRO)列表,它代表了類繼承的順序,我們可以使用下面的方式獲得某個(gè)類的 MRO 列表: ?
那這個(gè) MRO 列表的順序是怎么定的呢,它是通過一個(gè) C3 線性化算法來實(shí)現(xiàn)的,這里我們就不去深究這個(gè)算法了,感興趣的讀者可以自己去了解一下,總的來說,一個(gè)類的 MRO 列表就是合并所有父類的 MRO 列表,并遵循以下三條原則: ?
---子類永遠(yuǎn)在父類前面 ?
---如果有多個(gè)父類,會根據(jù)它們在列表中的順序被檢查 ?
---如果對下一個(gè)類存在兩個(gè)合法的選擇,選擇*個(gè)父類 ?
如何賦值
定義一個(gè)列表a,賦值為1-9這九個(gè)數(shù)字元素,注意表示形式 ?
利用類似JavaScript中數(shù)組的取值方式,將列表a中的第二個(gè)、第四個(gè)、第六個(gè)和第八個(gè)取出來拼成一個(gè)新列表 ?
如果列表中的元素有很多,需要換成其他的方法拼接,但是注意數(shù)據(jù)類型 ?
再次定義一個(gè)空列表c,Number類型d為9,使用for...in循環(huán)語句遍歷range(d),然后將滿足條件的元素裝到c中 ?
第四步拼成的列表元素都是奇數(shù)元素,再次使用一次,結(jié)果發(fā)現(xiàn)奇數(shù)和偶數(shù)都在一起了 ?
,再次調(diào)用for...in語句,if語句中的條件改為i%2==1,這時(shí)滿足了條件