python開發中容易犯的錯誤整合

寫在前面

長期更新的博文。多數是一些比較隱蔽的問題。歡迎留言補充。java

pip並非那麼安逸

pip安裝對於開發者來講確實是一種解放。能夠自動安裝依賴包,但執行最簡單的pip安裝命令時,並非全部的依賴都會安裝。有一些是模塊可選擇的,好比gunicorn在選擇異步框架時。有一些由於調用的層次較多,忽視了,最後pip仍是會提醒缺乏一些依賴。留心每次安裝的結尾。python

import時名稱相同/類似(但實際模塊不一樣)

近幾年出現了較屢次針對python供應鏈的黑客攻擊以後,python官方對模塊進行了規範,其中包括在pypi中搜索模塊時,模塊主頁上都會有一個安裝命令,明確告知安裝它的時候該使用什麼。數組

有些是由於升級。好比使用beautifulsoup,雖然名字是叫beautifulsoup,可是它目前對應的模塊叫作beautifulsuop4。框架

還有庫存在重名衝突致使產生問題。假如經過閱讀import的內容去安裝一個模塊,以後運行會提示模塊中沒有代碼中的函數或者變量。查看模塊源代碼確實沒有,可是運行的代碼一樣也不會錯,陷入懷疑人生。典型的就是加密庫中的cipher,一個是cipher,另外一個叫pycipher。可是導入的是同一個名字:cipher。異步

錯誤地import了自定義的模塊

在新建py文件的時候,多是由於本身的腦海中反覆考慮想着代碼功能,而後就以表明程序功能的單詞來命名爲文件了。import導入的時候,是會引入同目錄下的文件的,若是import的名字本來是要調用某個模塊的,可是本身編寫的函數又起了一樣了名字,解釋器就會把當前目錄下本身寫的這個函數編譯導入進來。函數

很是明顯的特徵:文件夾下出現了一個和.py同名的.pyc文件。性能

嘗試修改字符串

多是先學了c、java等語言,而後餘孽未消,將它們對數組的定義和思惟帶入到了python中來。python字符串不支持直接修改,修改字符串的某一位或者某幾位,須要靠拼接的方法。也是涉及重建一個字符串對象。加密

is和==不相同

比較值的時候使用==,比較地址的時候使用is。code

斷定爲空列表的時候能夠是使用A == [],可是若是使用A is [],即使先前賦值A = [],返回的結果也是False對象

字符串拼接的時候使用+

因爲python字符串不可變,每次使用+進行拼接,產生的結果都要在內存中新建一個對象來放置這個新生成的字符串,因此大量拼接操做的性能低下。可使用內置的join()方法來替代+進行字符串拼接。

相關文章
相關標籤/搜索