Python中幾個非常神奇的代碼的簡潔,方便,高效!

Python中幾個非常神奇的代碼的簡潔,方便,高效!

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

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

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

看完之后,相信初學(xué)者會更快的喜歡上python.

1.列表推導(dǎo)

要說python里面最簡潔最神奇的代碼,列表推導(dǎo)應(yīng)該算排行第一。

這是一種非常精煉的寫法,可以根據(jù)一份列表來制作另外一份。這種表達(dá)式稱為list comprehension(列表推導(dǎo))

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

Python中幾個非常神奇的代碼的簡潔,方便,高效!

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

Python中幾個非常神奇的代碼的簡潔,方便,高效!

例子3:若要需要對序列里面的內(nèi)容進(jìn)行循環(huán)處理時,也可以加一個函數(shù)進(jìn)行組合完成

Python中幾個非常神奇的代碼的簡潔,方便,高效!

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

2.with用法

一般我們處理文件都是先打開->然后處理->然后關(guān)閉.比較麻煩,還需要防止異常保護(hù)try/finally,很多時候我們都把精力集中在如何處理文件這樣會忘掉關(guān)閉文件.Python里面有一種非常簡潔的方法:

普通的打開,關(guān)閉文件處理:

Python中幾個非常神奇的代碼的簡潔,方便,高效!

用with語句,使用起來非常簡單,有點像英語,用with語句能夠保證當(dāng)寫操作執(zhí)行完畢之后,自動關(guān)閉文件

Python中幾個非常神奇的代碼的簡潔,方便,高效!

其實with的使用場景非常多,除了對于文件的處理關(guān)閉,在多線程的使用里面對鎖的處理也是經(jīng)常使用的 。以后的文章會講python的多線程,多進(jìn)程的使用,會展開講.

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

3.匿名函數(shù)lambda

  • python里面有一個"懶人專用的函數(shù)",叫做匿名函數(shù)(也就是沒有函數(shù)名)的函數(shù).我們在傳入函數(shù)時,有些時候,不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便.
  • lambda(這個名字其實是借鑒了另外一個黑客非常喜歡的語言LISP),lambda一般的形式是關(guān)鍵字lambda 后面跟一個或者多個參數(shù),后面緊跟一個冒號,之后是一個表達(dá)式:
  • lambda arg1,agr2,...agrN:express using arguments

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

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

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

通過對比可以看出,匿名函數(shù)lambda x: x * x實際上就是:

def f(x):

return x * x

用匿名函數(shù)的好處是顯而易見的:

  • 一方面是可以免去取名字的麻煩(因為高質(zhì)量的代碼對函數(shù)的取名是有一定的要求的)
  • 而且不必?fù)?dān)心函數(shù)名沖突
  • 此外,匿名函數(shù)也是一個函數(shù)對象,也可以把匿名函數(shù)賦值給一個變量,再利用變量來調(diào)用該函數(shù)

4.生成器

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

今天我先來看一下它的一個簡單例子,一個關(guān)于斐波那契數(shù)列的實現(xiàn):

Python中幾個非常神奇的代碼的簡潔,方便,高效!

用了生成器的函數(shù):

Python中幾個非常神奇的代碼的簡潔,方便,高效!

看第二種方法代碼是不是簡潔很多,這就是yield關(guān)鍵字的魅力.

如果一個函數(shù)定義中包含yield關(guān)鍵字,那么這個函數(shù)就不再是一個普通函數(shù),而是一個生成器函數(shù),打印看一下.

print(fac2(10))

<generator object fac2 at 0x026958F0>

生成器函數(shù)和普通函數(shù)的執(zhí)行流程非常不一樣:

  • 函數(shù)是順序執(zhí)行,遇到return語句或者最后一行函數(shù)語句就返回。
  • 而變成生成器的函數(shù),只會相應(yīng)迭代操作時才運(yùn)行,一般都是配合for使用(也有配合sum(),list())
  • 在每次調(diào)用next()的時候執(zhí)行,遇到yield語句返回,再次執(zhí)行時從上次返回的yield語句處繼續(xù)執(zhí)行。

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容