1. 程式人生 > >Python中那些神一樣的程式碼

Python中那些神一樣的程式碼

我一直說Python是非常優美的語言,那到底如何個呢,其中有一個特性就是簡潔.很多果粉為啥特別喜歡蘋果手機和蘋果電腦,一方面確實做的漂亮,另外一個就是簡潔你想蘋果手機開機關機,刪軟體都是一個步驟,而我們用win,關機至少3-5步,刪軟體更不要說了,非常麻煩.

有的時候做產品不是要做加法而且要做減法,並且做到極致(有點跑題了,我們還是回到Python)

我把Python裡面非常有名的簡潔,高效,方便的程式碼整理出來,讓我們來一睹她的風采。其實每個主題展開講都是很大的篇幅,今天我們先overview一下

看完之後,相信初學者會更快的喜歡上python.

1.列表推導

要說Python裡面最簡潔最神奇的程式碼,列表推導應該算排行第一

這是一種非常精煉的寫法,可以根據一份列表來製作另外一份。這種表示式稱為list comprehension(列表推導)

例子1,利用一個列表生成一個新的列表


例子2,甚至可以過濾一些列表中的元素,列如:


例子3:若要需要對序列裡面的內容進行迴圈處理時,也可以加一個函式進行組合完成


看完列表推導的用法,是不是覺得眼前一亮好很方便啊.

2.with用法

一般我們處理檔案都是先開啟->然後處理->然後關閉.比較麻煩還需要防止異常保護try/finally,很多時候我們都把精力集中在如何處理檔案這樣會忘掉關閉檔案.Python裡面有一種非常簡潔的方法:

普通的開啟,關閉檔案處理:


用with語句,使用起來非常簡單,有點像英語,用with語句能夠保證當寫操作執行完畢之後,自動關閉檔案



其實with的使用場景非常多,除了對於檔案的處理關閉,在多執行緒的使用裡面對鎖的處理也是經常使用的 。以後的文章會講python的多執行緒,多程序的使用,會展開講.

with的用法體現了Python的一個精髓:把一些繁瑣的事務交給語言本身,開發者只要focus放在處理問題的邏輯上就可以了.

3.匿名函式lambda

  • Python裡面有一個"懶人專用的函式",叫做匿名函式(也就是沒有函式名)的函式.我們在傳入函式時,有些時候,不需要顯式地定義函式,直接傳入匿名函式更方便.

  • lambda(這個名字其實是借鑑了另外一個黑客非常喜歡的語言LISP),lambda一般的形式是關鍵字lambda 後面跟一個或者多個引數,後面緊跟一個冒號,之後是一個表示式:

  • lambda arg1,agr2,...agrN:express using arguments

以map()函式為例,若要計算一個列表裡面的每個元素的平方,可以直接傳入匿名函式:

>>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])

[1, 4, 9, 16, 25, 36, 49, 64, 81]

通過對比可以看出,匿名函式lambda x: x * x實際上就是:

def f(x):

    return x * x

用匿名函式的好處是顯而易見的:

  • 一方面是可以免去取名字的麻煩(因為高質量的程式碼對函式的取名是有一定的要求的)

  • 而且不必擔心函式名衝突

  • 此外,匿名函式也是一個函式物件,也可以把匿名函式賦值給一個變數,再利用變數來呼叫該函式: 

4.生成器

生成器是python裡面一個比較難理解的概念,也是Python中引入的兩個強大的特性之一(猜猜另外一個特性是啥,對了就是裝飾器)

今天我先來看一下它的一個簡單例子,一個關於斐波那契數列的實現:

用了生成器的函式:


看第二種方法程式碼是不是簡潔很多,這就是yield關鍵字的魅力.

如果一個函式定義中包含yield關鍵字,那麼這個函式就不再是一個普通函式,而是一個生成器函式,列印看一下.

print(fac2(10))

>>><generator object fac2 at 0x026958F0>

生成器函式和普通函式的執行流程非常不一樣:

  • 函式是順序執行,遇到return語句或者最後一行函式語句就返回。

  • 而變成生成器的函式,只會相應迭代操作時才執行,一般都是配合for使用(也有配合sum(),list())

  • 在每次呼叫next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

好了,以上幾個就是Python中非常神奇的程式碼,不知道大家看完之後是不是對Python喜愛又加深了一分,那就不枉我大半夜敲這麼多字了(說實話敲的有點手疼),其實簡潔高效就是python的代名詞.

好了最後說一下,若我寫的對大家有幫助,麻煩大家支援一下,也是對我的一點鼓勵和動力.