一些Python的慣用法和小技巧:Pythonic

來源:互聯網
上載者:User

標籤:http   使用   io   for   ar   art   代碼   html   

Pythonic其實是個模糊的含義,沒有確定的解釋。網上也沒有過多關於Pythonic的說明,我個人的理解是更加Python,更符合Python的行為習慣。本文主要是說明一些Python的慣用法和小技巧,其實與上一篇《編碼規範》有異曲同工之妙,都是為了增加代碼可讀性,但Pythonic可能還會從效能的角度進行考慮。

首先是兩個不得不說的Python的特性List Comprehension和Generator Expression,非常精簡的文法,很大程度上取代了冗長for迴圈。

1. 列表解析(List Comprehension)List Comprehension是在Python2.0版本中加進入的,是一種更高效、簡潔的for結構替代品,作為新手寫上幾個後就對它愛不釋手,驚呼太好用了。

例子:將原始列表中的所有元素進行某種操作後賦值給新的列表。

如果用for迴圈,代碼如下:

oldlist = []

for item in oldlist:

newlist.append(func(item))

如果使用List Comprehension,代碼如下:

newlist = [func(item) for item in oldlist]

我們明顯看到差別,3行變一行,代碼可讀性增強,而且效能也提升很多,據說基本可以達到c語言的速度。

List Comprehension還支援過濾功能,在列表產生過程中套用for if字句,非常好用。樣本如下:

evens = [even for even in range(10) if even % 2 == 0]

只需要一行,就將得到0到9的數字中的所有偶數,過濾掉了奇數。

2. 產生器運算式(Generator Expression):Python2.4中引入了Generator Expression。它功能上類似於List Comprehension,這你就要問了,為什麼要加入這個呢。因為Generator Expression更加高效,避免了產生整個列表,改善效能及記憶體佔用,取而代之的是返回一個generator object,通過它迭代的返回列表中的每一個值。

而且Generator Expression的使用方法也很簡單,就是將List Comprehension中的中括弧[]改成小括弧(),樣本如下:

newlist = (func(item) for item in oldlist)

這個返回的newlist其實並不是一個list,而是前面提到的generator object,可以理解為列表的一個迭代器,類似於C++中的iter。 可以通過newlist.next()迭代獲得列表中的每一項。

List Comprehension和Generator Expression實在是Python中的亮點,簡潔高效,一定要經常用、時時用、秒秒用。

然後是一些小技巧(大多數是很多語言都提倡的編程實踐):

1. 字串拼接:使用’’.join進行字串拼接,而不是a += b這種形式。因為join將保證這個過程的時間複雜度為線性,效率更高。道理很多人都知道,但是大多數人還是喜歡用“+”,因為這個實在太簡潔了。其實很多語言都提供了拼接字串的方法或者相應的類,良好編程習慣從拼接字串開始。

2. 異常類型:基於類的異常總是好過基於字串的異常。我們最好構造一個基於Exception的子類。

當拋出一個異常的時候,使用”raise ValueError(‘message’)”替代”raise ValueError, ’message’”的形式。

3. None判斷:判斷一個執行個體變數是否為空白的時候,應該總是用’is’或者’is not’,而不要使用相等操作符。

4. 物件類型判斷:物件類型的比較應該始終用isinstance()代替直接比較類型。例如:

使用if isinstance(obj, int): 而不是 if type(obj) is type(1):

5. 字串前尾碼判斷:在檢查首碼或尾碼時避免對字串進行切片。用startswith()和endswith()代替,因為它們是明確的並且錯誤更少。例如:

使用if foo.startswith(‘bar‘): 替代 if foo[:3] == ‘bar‘:

6. 變數值交換:在其他語言中,我們經常這樣交換兩個變數的值。t=a; a=b; b=t;

但是在Python中,我們還有一個簡單的辦法,a, b = b, a,並且這種方法更快,更酷。

 

 

[轉載] www.cr173.com/html/8108_1.html

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.