寫在前面 長期更新的博文。多數是一些比較隱蔽的問題。歡迎留言補充。 pip並不是那麼安逸 pip安裝對於開發者來說確實是一種解放。可以自動安裝依賴包,但執行最簡單的pip安裝命令時,並不是所有的依賴都會安裝。有一些是模塊可選擇的,比如gunicorn在選擇非同步框架時。有一些因為調用的層次較多,忽視了 ...
寫在前面
長期更新的博文。多數是一些比較隱蔽的問題。歡迎留言補充。
pip並不是那麼安逸
pip安裝對於開發者來說確實是一種解放。可以自動安裝依賴包,但執行最簡單的pip安裝命令時,並不是所有的依賴都會安裝。有一些是模塊可選擇的,比如gunicorn在選擇非同步框架時。有一些因為調用的層次較多,忽視了,最後pip還是會提醒缺少一些依賴。留心每次安裝的結尾。
import時名稱相同/相似(但實際模塊不同)
近幾年出現了較多次針對python供應鏈的黑客攻擊之後,python官方對模塊進行了規範,其中包括在pypi中搜索模塊時,模塊主頁上都會有一個安裝命令,明確告知安裝它的時候該使用什麼。
有些是因為升級。比如使用beautifulsoup,雖然名字是叫beautifulsoup,但是它目前對應的模塊叫做beautifulsuop4。
還有庫存在重名衝突導致產生問題。假如通過閱讀import的內容去安裝一個模塊,之後運行會提示模塊中沒有代碼中的函數或者變數。查看模塊源代碼確實沒有,但是運行的代碼同樣也不會錯,陷入懷疑人生。典型的就是加密庫中的cipher,一個是cipher,另一個叫pycipher。但是導入的是同一個名字:cipher。
錯誤地import了自定義的模塊
在新建py文件的時候,可能是因為自己的腦海中反覆考慮想著代碼功能,然後就以代表程式功能的單詞來命名為文件了。import導入的時候,是會引入同目錄下的文件的,如果import的名字原本是要調用某個模塊的,但是自己編寫的函數又起了同樣了名字,解釋器就會把當前目錄下自己寫的這個函數編譯導入進來。
非常明顯的特征:文件夾下出現了一個和.py同名的.pyc文件。
嘗試修改字元串
可能是先學了c、java等語言,然後餘孽未消,將它們對數組的定義和思維帶入到了python中來。python字元串不支持直接修改,修改字元串的某一位或者某幾位,需要靠拼接的方法。也是涉及重建一個字元串對象。
is和==不相同
比較值的時候使用==,比較地址的時候使用is。
判定為空列表的時候可以是使用A == []
,但是如果使用A is []
,即便先前賦值A = []
,返回的結果也是False
。
字元串拼接的時候使用+
由於python字元串不可變,每次使用+進行拼接,產生的結果都要在記憶體中新建一個對象來放置這個新生成的字元串,所以大量拼接操作的性能低下。可以使用內置的join()方法來替代+進行字元串拼接。