偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python中那些神一樣的算法

開(kāi)發(fā) 后端 算法
我一直說(shuō)python是非常優(yōu)美的語(yǔ)言,那到底如何個(gè)美呢,其中有一個(gè)特性就是簡(jiǎn)潔。有的時(shí)候做產(chǎn)品不是要做加法而且要做減法,并且做到極致。

今天讓我們來(lái)看一下python里面非常有名的簡(jiǎn)潔,高效,方便的代碼,讓我們來(lái)一睹她的風(fēng)采。其實(shí)每個(gè)主題展開(kāi)講都是很大的篇幅,今天我們先簡(jiǎn)單看看。

[[395145]]

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

一.列表推導(dǎo)

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

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

例子1,利用一個(gè)列表生成一個(gè)新的列表

 

Python中那些神一樣的算法

 

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

 

Python中那些神一樣的算法

 

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

 

Python中那些神一樣的算法

 

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

二、with用法

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

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

 

Python中那些神一樣的算法

 

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

 

Python中那些神一樣的算法

 

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

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

三、匿名函數(shù)lambda

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

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

 

  1. >>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) 
  2. [1, 4, 9, 16, 25, 36, 49, 64, 81] 

 

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

 

  1. def f(x): 
  2.     return x * x 

 

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

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

四、生成器

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

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

 

Python中那些神一樣的算法

 

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

 

Python中那些神一樣的算法

 

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

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

 

  1. print(fac2(10)) 
  2. >>><generator object fac2 at 0x026958F0> 

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

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

 

好了,以上幾個(gè)就是python中非常神奇的代碼,不知道大家看完之后是不是對(duì)python的喜愛(ài)又加深了一分,其實(shí)簡(jiǎn)潔高效就是python的代名詞.

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2020-02-28 15:49:26

2019-09-05 09:29:00

CAP理論分布式系統(tǒng)

2023-01-03 14:54:37

技術(shù)管理

2022-09-26 08:06:24

Go語(yǔ)言

2022-09-23 15:23:08

webpack5改變代碼

2009-06-12 15:26:02

2011-02-28 10:38:13

Windows 8

2012-03-07 17:24:10

戴爾咨詢(xún)

2012-12-20 10:17:32

IT運(yùn)維

2013-01-11 18:10:56

軟件

2015-08-25 09:52:36

云計(jì)算云計(jì)算產(chǎn)業(yè)云計(jì)算政策

2009-07-07 10:44:14

多態(tài)

2022-01-09 16:59:04

應(yīng)用打碼工具DAMA

2023-05-23 13:59:41

RustPython程序

2013-12-31 09:19:23

Python調(diào)試

2013-12-17 09:02:03

Python調(diào)試

2021-05-01 06:28:32

Windows10操作系統(tǒng)微軟

2021-05-20 08:37:32

multiprocesPython線程

2017-05-25 15:02:46

聯(lián)宇益通SD-WAN

2016-05-09 18:40:26

VIP客戶(hù)緝拿
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)