1. 程式人生 > >Python程序員鮮為人知但你應該知道的16個問題

Python程序員鮮為人知但你應該知道的16個問題

可變對象 ado 異常處理 遇到 圖片 免費 ffffff 它的 db4

這篇文章主要介紹了Python程序員代碼編寫時應該避免的16個“坑”,也可以說成Python程序員代碼編寫時應該避免的16個問題,需要的朋友可以參考。

  1. 不要使用可變對象作為函數默認值

代碼如下:

技術分享圖片

這2個例子說明了什麽? 字典,集合,列表等等對象是不適合作為函數默認值的. 因為這個默認值實在函數建立的時候就生成了, 每次調用都是用了這個對象的”緩存”. 我在上段時間的分享python高級編程也說到了這個問題,這個是實際開發遇到的問題,好好檢查你學過的代碼, 也許只是問題沒有暴露。

可以這樣改,代碼如下:

技術分享圖片

  1. 生成器不保留叠代過後的結果

代碼如下:

  1. lambda在閉包中會保存局部變量

代碼如下:

技術分享圖片

這個問題還是上面說的python高級編程中說過具體原因. 其實就是當我賦值給my_list的時候,lambda表達式就執行了i會循環,直到 i =4,i會保留

但是可以用生成器,代碼如下:

技術分享圖片

也可以堅持用list,代碼如下:

技術分享圖片

有點不好懂是吧,在看看python的另外一個魔法,代碼如下:

技術分享圖片

一個分組的函數,看起來很不好懂,對吧? 我們來解析下這裏

代碼如下:

技術分享圖片

  1. 在循環中修改列表項

代碼如下:

技術分享圖片

思考一下,為什麽 – 是因為你對列表的remove,影響了它的index

代碼如下:

技術分享圖片

  1. IndexError – 列表取值超出了他的索引數

代碼如下:

技術分享圖片

  1. 重用全局變量

代碼如下:

技術分享圖片

技術分享圖片

  1. 拷貝可變對象

代碼如下:

技術分享圖片

  1. python多繼承

代碼如下:

技術分享圖片

看起來都是很簡單, 有次序的從底向上,從前向後找,找到就返回. 再看例子:

代碼如下:

技術分享圖片

這也就涉及了MRO(Method Resolution Order):

代碼如下:

技術分享圖片

MRO的算法有點小復雜,既不是深度優先,也不是廣度優先

  1. 列表的+和+=, append和extend

代碼如下:

技術分享圖片

  1. datetime也有布爾值

這是一個坑,代碼如下:

技術分享圖片

  1. ‘==’ 和 is 的區別

我的理解是”is”是判斷2個對象的身份, ==是判斷2個對象的值,代碼如下:

技術分享圖片

  1. 淺拷貝和深拷貝

我們在實際開發中都可以向對某列表的對象做修改,但是可能不希望改動原來的列表. 淺拷貝只拷貝父對象,深拷貝還會拷貝對象的內部的子對象,代碼如下:

技術分享圖片

技術分享圖片

  1. bool其實是int的子類

代碼如下:

技術分享圖片

  1. 元組是不是真的不可變?

代碼如下:

技術分享圖片

這裏有個不錯的解釋Python’s += Is Weird, Part II :

代碼如下:

技術分享圖片

  1. python沒有私有方法/變量? 但是可以有”偽”的

代碼如下:

技術分享圖片

  1. 異常處理加else

代碼如下:

技術分享圖片

以上就是我的全部分享,如果你跟我一樣都喜歡python,也在學習python的道路上奔跑,歡迎你加入python學習群:839383765 群內每天都會分享最新業內資料,企業項目案例,分享python免費課程,共同交流學習,讓學習變(編)成(程)一種習慣!

Python程序員鮮為人知但你應該知道的16個問題