?
我把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的代名詞.好了最后說一下,若我寫的對大家有幫助,麻煩大家支持一下,也是對我的一點鼓勵和動力.
原文:https://blog.csdn.net/qq_41888542/article/details/79824293?