您好,登錄后才能下訂單哦!
這篇文章主要介紹了使用Python能做什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇使用Python能做什么文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
一.多編程范式
Python是一門(mén)多范式的編程語(yǔ)言,所謂的過(guò)程式,面向?qū)ο蠛秃瘮?shù)式的結(jié)合。
大部分人接觸編程語(yǔ)言都是從過(guò)程式開(kāi)始的,原因是因?yàn)檫^(guò)程式的程序方式與計(jì)算機(jī)運(yùn)行方式是統(tǒng)一的,指令序列與運(yùn)行過(guò)程是統(tǒng)一的
如典型的C,我也是從C開(kāi)始學(xué)習(xí)的,過(guò)程式的程序語(yǔ)言設(shè)計(jì)編寫(xiě)程序較為簡(jiǎn)單,但是符合人機(jī)交互思考方式。
Python雖然是一門(mén)面向?qū)ο笳Z(yǔ)言,就連“ ”(空格)也可以看做是一個(gè)對(duì)象,但是Python勝任過(guò)程式是沒(méi)有問(wèn)題的。
如不需要使用類的靜態(tài)方法:
def a_plus_b(a,b): return a+b
python在設(shè)計(jì)的時(shí)候?qū)⑵洚?dāng)做一門(mén)面向?qū)ο蟮姆绞骄帉?xiě),且不說(shuō)面向?qū)ο蠼o軟件設(shè)計(jì)帶來(lái)的一些革命等,在python這樣的動(dòng)態(tài)語(yǔ)言中面向?qū)ο笥幸粋€(gè)亮點(diǎn)就是Duck typing(鴨子類型)
關(guān)于鴨子類型,就是說(shuō),如果我認(rèn)為一個(gè)抽象的東西會(huì)游泳會(huì)“嘎嘎”叫,我就可以把它當(dāng)做鴨子。
def use_duck( Duck ): Duck.swim() Duck.gaga() class Duck: def swim(self): ... def gaga(self): ...
如果這樣使用
little_duck Duck() use_duck( little_duck )
關(guān)于Duck類,你可以給他取任何的名字,或者繼承它取另一個(gè)名字,只需要實(shí)現(xiàn) swim() gaga() 你就可以把它當(dāng)做鴨子
關(guān)于鴨子類型,很多人不理解為什么不需要提供一個(gè)接口來(lái)規(guī)定鴨子的行為,我既不支持也不反對(duì),我的觀點(diǎn)是這樣的:
1.對(duì)于參數(shù)的檢查,不符合動(dòng)態(tài)語(yǔ)言的特性
2.提供了接口規(guī)范,那就不是鴨子類型了,直接叫多態(tài)得了
關(guān)于python支持的函數(shù)式編程
首先是lambda 演算
函數(shù)式編程的定義是將函數(shù)看做是變量一樣的待遇,變量在程序中最簡(jiǎn)單的有什么待遇呢
1.可以賦值
2.可以作為參數(shù)
3.可以改變值(Erlang例外)
4.且不說(shuō)生命周期了和作用域了
λ演算背后蘊(yùn)含著計(jì)算機(jī)可計(jì)算性的深厚知識(shí),lambda也是圖靈模型,是停機(jī)問(wèn)題的一個(gè)否定答案。不僅僅是一個(gè)匿名函數(shù)那樣簡(jiǎn)單
關(guān)于lambda 演算,看看這個(gè)程序做了什么
map(lambda n:2*n,[1,2,3,4,5])
1.lambda n:2*n 本身作為一個(gè)匿名函數(shù)
2.lambda 本身作為一個(gè)參數(shù)傳入 map()函數(shù) ,這也就是說(shuō)我的高階函數(shù),可以將函數(shù)變身看成是一個(gè)變量作為參數(shù)傳遞,這也是它作為函數(shù)受到的高等待遇
關(guān)于賦值和改變值,兩種方式:
1.f = fun() 不改變函數(shù)狀態(tài),只改變名稱,但是說(shuō)明函數(shù)是可以賦值的
2.可以使用閉包作為改變函數(shù)的狀態(tài)方式,或者使用裝飾器來(lái)完成函數(shù)狀態(tài)改變
函數(shù)式編程的使用也可以提高程序的可讀性和減少代碼,而且能夠清晰的表達(dá)函數(shù)的功能,如MapReduce就是來(lái)自函數(shù)式編程的思
Map(func,List)
作用是將func 作用于List中的每一個(gè)元素
以剛才的例子舉例
map(lambda n:2*n,[1,2,3,4,5])
此函數(shù)返回:[2,4,6,8,10]
重要的是在于知道這樣的方式帶給我們的清晰的設(shè)計(jì)方式
當(dāng)然函數(shù)式編程不是那么幾句話就說(shuō)完的,理解函數(shù)式編程的核心是理解 λ演算
二.一些有意思的特性
惰性計(jì)算:
看看完成一個(gè)斐波那契數(shù)列python 可以怎么做:
>>> def fib(): a , b = 0 ,1 while 1: yield b a , b = b ,a+b >>> f = fib()
實(shí)際上由yield 生成了一個(gè)可迭代對(duì)象,每次調(diào)用
f.next()就可以產(chǎn)生一個(gè)斐波那契值,而函數(shù)的內(nèi)部狀態(tài)是由迭代對(duì)象存儲(chǔ)的
至于返回一個(gè)可迭代對(duì)象,如果需要確定迭代到多少位,可以使用 itertools.islice
協(xié)程:
協(xié)程也是一個(gè)基于yield的概念,主要的模式是微線程的協(xié)作式工作模式:
def coroutine(func): def ret(): f = func() f.next() return f return ret @coroutine def consumer(): print "Wait to getting a task" while 1: n = (yield) print "Got %s",n import time def producer(): c = consumer() while 1: time.sleep(1) print "Send a task to consumer" c.send("task") if __name__ == "__main__": producer()
協(xié)程帶來(lái)的好處是可以直接調(diào)度你的線程,這也是它為什么叫做協(xié)程而不是線程的原因,線程屬于搶占式并發(fā),協(xié)程屬于協(xié)作式并發(fā)
三.動(dòng)態(tài)語(yǔ)言帶來(lái)的好處
從程序設(shè)計(jì)帶來(lái)的快感(我相信只有熱愛(ài)這方面的人才有的感覺(jué))來(lái)說(shuō),動(dòng)態(tài)語(yǔ)言,比如python,節(jié)約了更多的時(shí)間可以用來(lái)陪女朋友或者老婆,或者老公
當(dāng)然,作為互聯(lián)網(wǎng)時(shí)代快速開(kāi)發(fā)來(lái)說(shuō),趕鴨子上線,也是《黑客與畫(huà)家》上面介紹的,快速開(kāi)發(fā)很重要,當(dāng)然需要符合這方面的需求
動(dòng)態(tài)語(yǔ)言的CPU密集型運(yùn)算必然比不過(guò)C/C++
關(guān)于“使用Python能做什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“使用Python能做什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。