如果我們有很多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)在,讓我們看一下使用: ?
如果你認為 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ù)它們在列表中的順序被檢查 ?
---如果對下一個類存在兩個合法的選擇,選擇*個父類 ?
如何賦值
定義一個列表a,賦值為1-9這九個數(shù)字元素,注意表示形式 ?
利用類似JavaScript中數(shù)組的取值方式,將列表a中的第二個、第四個、第六個和第八個取出來拼成一個新列表 ?
如果列表中的元素有很多,需要換成其他的方法拼接,但是注意數(shù)據(jù)類型 ?
再次定義一個空列表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,這時滿足了條件