欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python函數(shù)式語(yǔ)言的簡(jiǎn)單介紹

python是什么樣的編程語(yǔ)言?

python是什么類(lèi)型的編程語(yǔ)言? Python是一種計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,是一種面向?qū)ο蟮膭?dòng)態(tài)、強(qiáng)類(lèi)型腳本語(yǔ)言(解釋型語(yǔ)言)。 腳本語(yǔ)言:一般也是解釋型語(yǔ)言。

成都創(chuàng)新互聯(lián)公司是少有的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、營(yíng)銷(xiāo)型企業(yè)網(wǎng)站、小程序定制開(kāi)發(fā)、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、友情鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,從2013年開(kāi)始,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶好評(píng)

優(yōu)點(diǎn)

簡(jiǎn)單:Python是一種代表簡(jiǎn)單主義思想的語(yǔ)言。閱讀一個(gè)良好的Python程序就感覺(jué)像是在讀英語(yǔ)一樣。它使你能夠?qū)W⒂诮鉀Q問(wèn)題而不是去搞明白語(yǔ)言本身。

易學(xué):Python極其容易上手,因?yàn)镻ython有極其簡(jiǎn)單的說(shuō)明文檔? ?。

易讀、易維護(hù):風(fēng)格清晰劃一、強(qiáng)制縮進(jìn)

用途廣泛

速度快:Python 的底層是用 C 語(yǔ)言寫(xiě)的,很多標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)也都是用 C 寫(xiě)的,運(yùn)行速度非常快。

免費(fèi)、開(kāi)源:Python是FLOSS(自由/開(kāi)放源碼軟件)之一。使用者可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中。FLOSS是基于一個(gè)團(tuán)體分享知識(shí)的概念。

高層語(yǔ)言:用Python語(yǔ)言編寫(xiě)程序的時(shí)候無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類(lèi)的底層細(xì)節(jié)。

可移植性:由于它的開(kāi)源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工作在不同平臺(tái)上)。這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux開(kāi)發(fā)的android平臺(tái)。

解釋性:一個(gè)用編譯性語(yǔ)言比如C或C++寫(xiě)的程序可以從源文件(即C或C++語(yǔ)言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語(yǔ)言(二進(jìn)制代碼,即0和1)。這個(gè)過(guò)程通過(guò)編譯器和不同的標(biāo)記、選項(xiàng)完成。

運(yùn)行程序的時(shí)候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤(pán)復(fù)制到內(nèi)存中并且運(yùn)行。而Python語(yǔ)言寫(xiě)的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼運(yùn)行 程序。

在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱(chēng)為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言并運(yùn)行。這使得使用Python更加簡(jiǎn)單。也使得Python程序更加易于移植。

面向?qū)ο螅篜ython既支持面向過(guò)程的編程也支持面向?qū)ο蟮木幊獭T凇懊嫦蜻^(guò)程”的語(yǔ)言中,程序是由過(guò)程或僅僅是可重用代碼的函數(shù)構(gòu)建起來(lái)的。在“面向?qū)ο蟆钡恼Z(yǔ)言中,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來(lái)的。

Python是完全面向?qū)ο蟮恼Z(yǔ)言。函數(shù)、模塊、數(shù)字、字符串都是對(duì)象。并且完全支持繼承、重載、派生、多繼承,有益于增強(qiáng)源代碼的復(fù)用性。Python支持重載運(yùn)算符和動(dòng)態(tài)類(lèi)型。相對(duì)于Lisp這種傳統(tǒng)的函數(shù)式編程語(yǔ)言,Python對(duì)函數(shù)式設(shè)計(jì)只提供了有限的支持。有兩個(gè)標(biāo)準(zhǔn)庫(kù)(functools, itertools)提供了Haskell和Standard ML中久經(jīng)考驗(yàn)的函數(shù)式程序設(shè)計(jì)工具。

可擴(kuò)展性、可擴(kuò)充性:如果需要一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開(kāi),可以部分程序用C或C++編寫(xiě),然后在Python程序中使用它們。

Python本身被設(shè)計(jì)為可擴(kuò)充的。并非所有的特性和功能都集成到語(yǔ)言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語(yǔ)言、C++、Cython來(lái)編寫(xiě)擴(kuò)充模塊。Python編譯器本身也可以被集成到其它需要腳本語(yǔ)言的程序內(nèi)。因此,很多人還把Python作為一種“膠水語(yǔ)言”(glue language)使用。使用Python將其他語(yǔ)言編寫(xiě)的程序進(jìn)行集成和封裝。在Google內(nèi)部的很多項(xiàng)目,例如Google Engine使用C++編寫(xiě)性能要求極高的部分,然后用Python或Java/Go調(diào)用相應(yīng)的模塊。《Python技術(shù)手冊(cè)》的作者馬特利(Alex Martelli)說(shuō):“這很難講,不過(guò),2004 年,Python 已在Google?內(nèi)部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,他們的目的是 Python where we can, C++ where we must,在操控硬件的場(chǎng)合使用C++,在快速開(kāi)發(fā)時(shí)候使用 Python。”

可嵌入性:可以把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。

豐富的庫(kù):Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。它可以幫助處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。這被稱(chēng)作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫(kù)以外,還有許多其他高質(zhì)量的庫(kù),如wxPython、Twisted和Python圖像庫(kù)等等。

規(guī)范的代碼:Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有較好可讀性。而Python語(yǔ)言寫(xiě)的程序不需要編譯成二進(jìn)制代碼。Python的作者設(shè)計(jì)限制性很強(qiáng)的語(yǔ)法,使得不好的編程習(xí)慣(例如if語(yǔ)句的下一行不向右縮進(jìn))都不能通過(guò)編譯。其中很重要的一項(xiàng)就是Python的縮進(jìn)規(guī)則。一個(gè)和其他大多數(shù)語(yǔ)言(如C)的區(qū)別就是,一個(gè)模塊的界限,完全是由每行的首字符在這一行的位置來(lái)決定(而C語(yǔ)言是用一對(duì)花括號(hào){}來(lái)明確的定出模塊的邊界,與字符的位置毫無(wú)關(guān)系)。通過(guò)強(qiáng)制程序員們縮進(jìn)(包括if,for和函數(shù)定義等所有需要使用模塊的地方),Python確實(shí)使得程序更加清晰和美觀。

高級(jí)動(dòng)態(tài)編程:雖然Python可能被粗略地分類(lèi)為“腳本語(yǔ)言”(script language),但實(shí)際上一些大規(guī)模軟件開(kāi)發(fā)計(jì)劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱(chēng)它為一種高級(jí)動(dòng)態(tài)編程語(yǔ)言,原因是“腳本語(yǔ)言”泛指僅作簡(jiǎn)單程序設(shè)計(jì)任務(wù)的語(yǔ)言,如shellscript、VBScript等只能處理簡(jiǎn)單任務(wù)的編程語(yǔ)言,并不能與Python相提并論。

做科學(xué)計(jì)算優(yōu)點(diǎn)多:說(shuō)起科學(xué)計(jì)算,首先會(huì)被提到的可能是MATLAB。除了MATLAB的一些專(zhuān)業(yè)性很強(qiáng)的工具箱還無(wú)法被替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相應(yīng)的擴(kuò)展庫(kù)。和MATLAB相比,用Python做科學(xué)計(jì)算有如下優(yōu)點(diǎn):

● 首先,MATLAB是一款商用軟件,并且價(jià)格不菲。而Python完全免費(fèi),眾多開(kāi)源的科學(xué)計(jì)算庫(kù)都提供了Python的調(diào)用接口。用戶可以在任何計(jì)算機(jī)上免費(fèi)安裝Python及其絕大多數(shù)擴(kuò)展庫(kù)。

● 其次,與MATLAB相比,Python是一門(mén)更易學(xué)、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計(jì)語(yǔ)言。它能讓用戶編寫(xiě)出更易讀、易維護(hù)的代碼。

● 最后,MATLAB主要專(zhuān)注于工程和科學(xué)計(jì)算。然而即使在計(jì)算領(lǐng)域,也經(jīng)常會(huì)遇到文件管理、界面設(shè)計(jì)、網(wǎng)絡(luò)通信等各種需求。而Python有著豐富的擴(kuò)展庫(kù),可以輕易完成各種高級(jí)任務(wù),開(kāi)發(fā)者可以用Python實(shí)現(xiàn)完整應(yīng)用程序所需的各種功能。

缺點(diǎn)

單行語(yǔ)句和命令行輸出問(wèn)題:很多時(shí)候不能將程序連寫(xiě)成一行,如import sys;for i in sys.path:print i。而perl和awk就無(wú)此限制,可以較為方便的在shell下完成簡(jiǎn)單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€(gè).py文件。

給初學(xué)者帶來(lái)困惑:獨(dú)特的語(yǔ)法,這也許不應(yīng)該被稱(chēng)為局限,但是它用縮進(jìn)來(lái)區(qū)分語(yǔ)句關(guān)系的方式還是給很多初學(xué)者帶來(lái)了困惑。即便是很有經(jīng)驗(yàn)的Python程序員,也可能陷入陷阱當(dāng)中。

運(yùn)行速度慢:這里是指與C和C++相比。Python開(kāi)發(fā)人員盡量避開(kāi)不成熟或者不重要的優(yōu)化。一些針對(duì)非重要部位的加快運(yùn)行速度的補(bǔ)丁通常不會(huì)被合并到Python內(nèi)。所以很多人認(rèn)為Python很慢。不過(guò),根據(jù)二八定律,大多數(shù)程序?qū)λ俣纫蟛桓摺T谀承?duì)運(yùn)行速度要求很高的情況,Python設(shè)計(jì)師傾向于使用JIT技術(shù),或者用使用C/C++語(yǔ)言改寫(xiě)這部分程序。可用的JIT技術(shù)是PyPy。

和其他語(yǔ)言區(qū)別

對(duì)于一個(gè)特定的問(wèn)題,只要有一種最好的方法來(lái)解決

這在由Tim Peters寫(xiě)的Python格言(稱(chēng)為T(mén)he Zen of Python)里面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語(yǔ)言(另一種功能類(lèi)似的高級(jí)動(dòng)態(tài)語(yǔ)言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。

Python的設(shè)計(jì)哲學(xué)是“優(yōu)雅”、“明確”、“簡(jiǎn)單”。因此,Perl語(yǔ)言中“總是有多種方法來(lái)做同一件事”的理念在Python開(kāi)發(fā)者中通常是難以忍受的。Python開(kāi)發(fā)者的哲學(xué)是“用一種方法,最好是只有一種方法來(lái)做一件事”。在設(shè)計(jì)Python語(yǔ)言時(shí),如果面臨多種選擇,Python開(kāi)發(fā)者一般會(huì)拒絕花俏的語(yǔ)法,而選擇明確的沒(méi)有或者很少有歧義的語(yǔ)法。由于這種設(shè)計(jì)觀念的差異,Python源代碼通常被認(rèn)為比Perl具備更好的可讀性,并且能夠支撐大規(guī)模的軟件開(kāi)發(fā)。這些準(zhǔn)則被稱(chēng)為Python格言。在Python解釋器內(nèi)運(yùn)行import this可以獲得完整的列表。

更高級(jí)的Virtual Machine

Python在執(zhí)行時(shí),首先會(huì)將.py文件中的源代碼編譯成Python的byte code(字節(jié)碼),然后再由Python Virtual Machine(Python虛擬機(jī))來(lái)執(zhí)行這些編譯好的byte code。這種機(jī)制的基本思想跟Java,.NET是一致的。然而,Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級(jí)的Virtual Machine。這里的高級(jí)并不是通常意義上的高級(jí),不是說(shuō)Python的Virtual Machine比Java或.NET的功能更強(qiáng)大,而是說(shuō)和Java 或.NET相比,Python的Virtual Machine距離真實(shí)機(jī)器的距離更遠(yuǎn)。或者可以這么說(shuō),Python的Virtual Machine是一種抽象層次更高的Virtual Machine。基于C的Python編譯出的字節(jié)碼文件,通常是.pyc格式。除此之外,Python還可以以交互模式運(yùn)行,比如主流操作系統(tǒng)Unix/Linux、Mac、Windows都可以直接在命令模式下直接運(yùn)行Python交互環(huán)境。直接下達(dá)操作指令即可實(shí)現(xiàn)交互操作。

python支持函數(shù)式編程嗎

python不是完全支持函數(shù)式編程,他支持部分函數(shù)式編程,函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語(yǔ)言編寫(xiě)的函數(shù)沒(méi)有變量,因此,任意一個(gè)函數(shù),只要輸入是確定的,輸出就是確定的,這種純函數(shù)我們稱(chēng)之為沒(méi)有副作用。而允許使用變量的程序設(shè)計(jì)語(yǔ)言,由于函數(shù)內(nèi)部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數(shù)是有副作用的。

Python對(duì)函數(shù)式編程提供部分支持。由于Python允許使用變量,因此,Python不是純函數(shù)式編程語(yǔ)言。

python是函數(shù)式編程語(yǔ)言嗎

函數(shù)式編程是使用一系列函數(shù)去解決問(wèn)題,按照一般編程思維,面對(duì)問(wèn)題時(shí)我們的思考方式是“怎么干”,而函數(shù)函數(shù)式編程的思考方式是我要“干什么”。 至于函數(shù)式編程的特點(diǎn)暫不總結(jié),我們直接拿例子來(lái)體會(huì)什么是函數(shù)式編程。

lambda表達(dá)式(匿名函數(shù)):

普通函數(shù)與匿名函數(shù)的定義方式:

#普通函數(shù)

def add(a,b):

return a + b

print add(2,3)

#匿名函數(shù)

add = lambda a,b : a + b

print add(2,3)

#========輸出===========

5

5

匿名函數(shù)的命名規(guī)則,用lamdba 關(guān)鍵字標(biāo)識(shí),冒號(hào)(:)左側(cè)表示函數(shù)接收的參數(shù)(a,b) ,冒號(hào)(:)右側(cè)表示函數(shù)的返回值(a+b)。

因?yàn)閘amdba在創(chuàng)建時(shí)不需要命名,所以,叫匿名函數(shù)^_^

Map函數(shù):

計(jì)算字符串長(zhǎng)度

abc = ['com','fnng','cnblogs']

for i in range(len(abc)):

print len(abc[i])

#========輸出===========

3

4

7

定義abc字符串?dāng)?shù)組,計(jì)算abc長(zhǎng)度然后循環(huán)輸出數(shù)組中每個(gè)字符串的長(zhǎng)度。

來(lái)看看map()函數(shù)是如何來(lái)實(shí)現(xiàn)這個(gè)過(guò)程的。

abc_len = map(len,['hao','fnng','cnblogs'])

print abc_len

#========輸出===========

[3, 4, 7]

雖然,輸出的結(jié)果中是一樣的,但它們的形式不同,第一種是單純的數(shù)值了,map()函數(shù)的輸出仍然保持了數(shù)組的格式。

大小寫(xiě)轉(zhuǎn)換;

python提供有了,upper() 和 lower() 來(lái)轉(zhuǎn)換大小寫(xiě)。

#大小寫(xiě)轉(zhuǎn)換

ss='hello WORLD!'

print ss.upper() #轉(zhuǎn)換成大寫(xiě)

print ss.lower() #轉(zhuǎn)換成小寫(xiě)

#========輸出===========

HELLO WORLD!

hello world!

通過(guò)map()函數(shù)轉(zhuǎn)換:

def to_lower(item):

return item.lower()

name = map(to_lower,['cOm','FNng','cnBLoGs'])

print name

#========輸出===========

['com', 'fnng', 'cnblogs']

這個(gè)例子中我們可以看到,我們寫(xiě)義了一個(gè)函數(shù)toUpper,這個(gè)函數(shù)沒(méi)有改變傳進(jìn)來(lái)的值,只是把傳進(jìn)來(lái)的值做個(gè)簡(jiǎn)單的操作,然后返回。然后,我們把其用在map函數(shù)中,就可以很清楚地描述出我們想要干什么。

再來(lái)看看普通的方式是如何實(shí)現(xiàn)字符串大小寫(xiě)轉(zhuǎn)換的:

abc = ['cOm','FNng','cnBLoGs']

lowname = []

for i in range(len(abc)):

lowname.append(abc[i].lower())

print lowname

#========輸出===========

['hao', 'fnng', 'cnblogs']

map()函數(shù)加上lambda表達(dá)式(匿名函數(shù))可以實(shí)現(xiàn)更強(qiáng)大的功能。

#求平方

#0*0,1*1,2*2,3*3,....8*8

squares = map(lambda x : x*x ,range(9))

print squares

#========輸出===========

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

Reduce函數(shù):

def add(a,b):

return a+b

add = reduce(add,[2,3,4])

print add

#========輸出===========

9

對(duì)于Reduce函數(shù)每次是需要對(duì)兩個(gè)數(shù)據(jù)進(jìn)行處理的,首選取2 和3 ,通過(guò)add函數(shù)相加之后得到5,接著拿5和4 ,再由add函數(shù)處理,最終得到9 。

在前面map函數(shù)例子中我們可以看到,map函數(shù)是每次只對(duì)一個(gè)數(shù)據(jù)進(jìn)行處理。

然后,我們發(fā)現(xiàn)通過(guò)Reduce函數(shù)加lambda表達(dá)式式實(shí)現(xiàn)階乘是如何簡(jiǎn)單:

#5階乘

#5!=1*2*3*4*5

print reduce(lambda x,y: x*y, range(1,6))

#========輸出===========

120

Python中的除了map和reduce外,還有一些別的如filter, find, all, any的函數(shù)做輔助(其它函數(shù)式的語(yǔ)言也有),可以讓你的代碼更簡(jiǎn)潔,更易讀。 我們?cè)賮?lái)看一個(gè)比較復(fù)雜的例子:

#計(jì)算數(shù)組中正整數(shù)的值

number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]

count = 0

sum = 0

for i in range(len(number)):

if number[i]0:

count += 1

sum += number[i]

print sum,count

if count0:

average = sum/count

print average

#========輸出===========

30 6

5

如果用函數(shù)式編程,這個(gè)例子可以寫(xiě)成這樣:

number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8]

sum = filter(lambda x: x0, number)

average = reduce(lambda x,y: x+y, sum)/len(sum)

print average

#========輸出===========

5

最后我們可以看到,函數(shù)式編程有如下好處:

1)代碼更簡(jiǎn)單了。

2)數(shù)據(jù)集,操作,返回值都放到了一起。

3)你在讀代碼的時(shí)候,沒(méi)有了循環(huán)體,于是就可以少了些臨時(shí)變量,以及變量倒來(lái)倒去邏輯。

4)你的代碼變成了在描述你要干什么,而不是怎么去干。

本文題目:python函數(shù)式語(yǔ)言的簡(jiǎn)單介紹
本文來(lái)源:http://chinadenli.net/article25/dsesici.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)云服務(wù)器小程序開(kāi)發(fā)關(guān)鍵詞優(yōu)化移動(dòng)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作