2014年5月10日 星期六

撰寫python常見的十大錯誤

原文如下:
http://www.toptal.com/python/top-10-mistakes-that-python-programmers-make

這篇文章列出了在撰寫Python時,常犯的錯誤
內容也稍微帶出了一些Python內部實做的細節

先寫下一點簡單的個人摘要,改天來翻譯一下好了

1. 誤用函式的參數:
python 的 函式參數是在函式宣告時就定義完畢,而且也只會定義一次
(the default value for a function argument is only evaluated once, at the time that the function is defined.)
int, float參數是沒啥感覺,但在list時,很容易誤以為每次都會產生新的list
實際reference是指向同一list

2. 誤用 class 變數:
子類別沒有特別override 父類別的變數時,子類別物件的變數其實都指向同一變數(即父類別的變數),會導致改了一個兒子,其他兄弟手上也跟著變

3. 例外處理沒正確捕捉
「except ValueError, IndexError:」的寫法只會看到ValueError, 後面的IndexError會被忽略,改成「except ( ValueError, IndexError ) as e:」就都能catch了

4. 誤解了Python 的 變數Scope
若想在函式內修改global 變數時,不要用assign operater (像是 += )
在函式內使用 += 時是會看區域變數,實際上當然沒有這個local變數
最後出現unboundLocalError, 畢竟等同於「尚未宣告就先指定值」

5. 在迭代list時修改了它
迭代過程中,刪除了list中的元素, 引發error
它建議是另開一個list, 迭代原list,並將符合條件者存入
反正沒被reference到的memory會被python的garbage collection回收

6. 弄錯Python的Closures實做
這部份要先去理解Closures(閉包),上次接觸這個名詞是在看JavaScript
的書,我記得好像是跟變數的生命週期有關.......
------待補-------

7. module互相引入
在架構上要注意這點,如果出現了互相引用,大概代表
功能之間的相依性有問題。

8. 取名時不小心跟標準函式庫一樣
盡量避免取什麼專有名詞的module吧

9. Python2.x 與 Python 3的寫法有點不同
說真的....我到現在都還是2.7版
------待補-------

10.誤用__del__ method
------待補-------



沒有留言:

張貼留言