Python程式設計中需要注意的一些事

劉志軍發表於2013-04-15

圍繞一門語言,學習它的文化精髓,能讓你成為一名更優秀的程式設計師。如果你還沒讀過Python之禪(Zen of Python) ,那麼開啟Python的命令提示符輸入import this,列表中的每一項你都可以在這裡找到相對應的例子。

(Credit: itswater

吸引我注意力的一條是:

優雅勝於醜陋 (Beautiful is better than ugly)

看下面例子:

一個帶有數字引數的list函式其功能是返回引數中的奇數可以分開寫:

記住Python中那些非常簡單的事

兩個變數的交換:

引數在切片操作中的步驟,如:


 

不要用可變物件作為預設引數值(Don’t use mutable as defaults)

使用iteritems而不是items

iteriterms 使用的是 generators,所以當迭代很大的序列是此方法更好

 

此情景和range與xrange的關係相似。

使用isinstance 而不是type

不要這樣做:

 

應該是這樣:


至於為什麼這樣做,看這裡:http://stackoverflow.com/a/1549854/504262

需要注意的是這裡使用basestring而不是str是因為你可能會用一個unicode物件去檢查是否為string,例如:

 

因為在Python中3.0以下的版本存在兩種字串型別str和unicode





學習各種集合(learn the various collections)

python有各種各樣的容器資料型別,在特定情況下選擇python內建的容器如:list和dict。通常更多像如下方式使用:

 

一種更好的方案如下:

一種更好的選擇 collection型別defautdict:

其它集合

當建立類時Python的魔術方法:

條件賦值

表示式請起來恰恰像:如果y等於1就把3賦值給x,否則把2賦值給x,當然同樣可以使用鏈式條件賦值如果你還有更復雜的條件的話。

然而到了某個特定的點,它就有點兒過分了。

記住,你可以在任何表示式中使用if-else例如:

func1將被呼叫如果y等於1的話,反之func2被呼叫。兩種情況下,arg1和arg2兩個引數都將附帶在相應的函式中。

類似地,下面這個表示式同樣是正確的

class1和class2是兩個類

在有必要的時侯使用Ellipsis

建立類時,你可以使用__getitem__,讓你的類像字典一個工作,拿下面這個類舉例來說:

因為有了__getitem__,你就能夠通過物件x的x[‘a’]獲取a的值,這應該是公認的事實。

這個物件通常用於繼承Python的切片(slicing) (http://docs.python.org/library/stdtypes.html#bltin-ellipsis-object),如果新增如下語句:

我們就可以使用x[…]獲取的包含所有項的序列

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

Python程式設計中需要注意的一些事

相關文章