Python簡(jiǎn)介

1.1 Python的歷史

1.1.1 Python的誕生

Python是一門高級(jí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言儡嘶,1989年,荷蘭的Guido von Rossum創(chuàng)造了它砂豌。Guido是是一個(gè)牛人腌闯,1982年蔽午,他從阿姆斯特丹大學(xué)獲得了數(shù)學(xué)和計(jì)算機(jī)碩士學(xué)位驮吱,因此他可以算是一位數(shù)學(xué)家茧妒,不過他更享受使用計(jì)算機(jī)解決問題的感覺。Python只是由Guido的一次hacking產(chǎn)生的左冬,1989年圣誕節(jié)假期桐筏,早就萌發(fā)了設(shè)計(jì)一門好用的高級(jí)語(yǔ)言的想法的Guido,放棄了休息拇砰,全身心的投入到了設(shè)計(jì)新語(yǔ)言的活動(dòng)中去梅忌,結(jié)果產(chǎn)生了世界上少有的幾門最優(yōu)美、最易用除破、最簡(jiǎn)潔的高級(jí)程序設(shè)計(jì)語(yǔ)言之一——Python語(yǔ)言牧氮。

我們說過,Guido是一個(gè)牛人瑰枫,他在設(shè)計(jì)Python語(yǔ)言之前踱葛,已經(jīng)接觸并使用過Pascal、C光坝、Fortran等高級(jí)語(yǔ)言尸诽,這些語(yǔ)言各有強(qiáng)大的功能,能夠很好地解決問題盯另,Guido也能很熟練地使用它們性含,他為什么還要"多此一舉"地設(shè)計(jì)一門新語(yǔ)言呢?

這是因?yàn)椋鲜鲞@些語(yǔ)言都是為了充分利用計(jì)算設(shè)備而設(shè)計(jì)的鸳惯,因?yàn)槟菚r(shí)的計(jì)算機(jī)CPU不夠快商蕴,內(nèi)存不夠大,這些語(yǔ)言設(shè)計(jì)的主要目標(biāo)之一是充分利用計(jì)算機(jī)有限的資源悲敷,讓程序運(yùn)行得更快究恤,占用的內(nèi)存空間更小,雖然也把人類的可讀性和易用性作為一個(gè)目標(biāo)后德,但后者仍不夠突出部宿,結(jié)果人類不能用最簡(jiǎn)潔的方式去書寫計(jì)算機(jī)程序,寫出來的程序既長(zhǎng)又不好懂瓢湃。舉個(gè)生活中的例子進(jìn)行類比: 假設(shè)初中生理张、小學(xué)生和幼兒園小朋友都解一道數(shù)學(xué)題:

雞兔同籠,共有頭48個(gè),腳132只,求雞和兔各有多少只?

初中生解這道題的方法是:

設(shè)有雞x只,兔y只绵患,則       # 對(duì)應(yīng)到計(jì)算機(jī)編程雾叭,這是編寫程序代碼的部分
x+y=48                   # 容易理解,容易編寫落蝙,簡(jiǎn)明
2x+4y=132
解這個(gè)二元一次方程組织狐,得:   # 這是程序運(yùn)行進(jìn)行計(jì)算的部分
x=30, y=18

小學(xué)生解這道題的方法是:

1. 將雞暂幼、兔都剪去2只腳,還剩幾只腳: 132-48*2 # 對(duì)應(yīng)到計(jì)算機(jī)編程,這是編寫程序                                                                           
                                         # 代碼的部分移迫,不容易理解
2. 上式計(jì)算結(jié)果是=36                      # 這是程序運(yùn)行進(jìn)行計(jì)算的部分
3. 剩下的腳是兔子的腳旺嬉,兔子有幾只: 36/2     # 對(duì)應(yīng)到計(jì)算機(jī)編程,這是編寫程序                                                                       
                                         # 代碼的部分厨埋,不容易理解 
4. 上式計(jì)算結(jié)果是=18
5. 雞有多少只: 48-18=30只

幼兒園小朋友解這道數(shù)學(xué)題時(shí)邪媳,需要家長(zhǎng)手把手地教他們做:

第一步: 48個(gè)頭中有雞的頭,也有兔子的頭
第二步: 132只腳中有雞的腳荡陷,也有兔子的腳
第三步: 每只雞有2只腳雨效,每只兔子有4只腳
...
很多步之后:
雞: 30只,兔: 18只

在上面這個(gè)例子中废赞,我們可以看到初中生徽龟、小學(xué)生、幼兒園小朋友之間解同一個(gè)數(shù)學(xué)問題的區(qū)別首先是表達(dá)方式上的區(qū)別蛹头,可以把他們類比成Python(初中生)顿肺、C/Fortran/Pascal(小學(xué)生)戏溺、匯編語(yǔ)言(幼兒園小朋友)之間的區(qū)別渣蜗,越是高級(jí)的語(yǔ)言,解題方法的表達(dá)方式就越簡(jiǎn)潔旷祸、越清晰耕拷、越容易理解,所需的解題步驟(代碼量)就越少托享。

Guido創(chuàng)造Python時(shí)想解決的是類似的問題骚烧,C/Fortran/Pascal甚至匯編語(yǔ)言的能力不可謂不強(qiáng)大,就像一個(gè)訓(xùn)練有素的小學(xué)生可以解決很多生活中的實(shí)際問題一樣闰围,但是它們的缺點(diǎn)是需要下達(dá)的指令(編寫的代碼)太多赃绊,而且不容易直觀地理解。舉個(gè)例子羡榴,常常一行Python代碼可以抵得上十幾行C語(yǔ)言代碼碧查。

先看Python代碼

# 代碼1.1 printStr.py ,這是Python代碼,這段代碼和下面的C代碼作用相同
s1="Hello,"
s2="World!"
s3=s1+s2       
print(s3)

代碼1.1 的輸出如下所示

$ python3 printStr.py
$ Hello,World!

說明: 本文中的Python代碼假定是在類Unix系統(tǒng)下運(yùn)行的校仑,$是命令提示符

再來看看C代碼

// 代碼1.2 printStr.c 這是C代碼
#include <malloc>
#include <stdlib>
#include <stdin>
int strlen(char str[])
{
  int len=0;
  char *p=0;
  for(p=str;p!=NULL;p++){
    len++;
  }
  return len;
}
int main(void){
  char s1[]="Hello,";
  char s2[]="World!";
  char * s3=(char *)malloc(sizeof(char)*(strlen(s1)+strlen(s2)+1));
  char *p=0;
  for(p=s1;p!=NULL;p++){
    *s3++=*p;
  }
  for(p=s2;p!=NULL;p++){
    *s3++=*p;
  }
  s3='\0';
  s3=s3-strlen(s3);
  printf("%s\n", s3);
}

代碼1.2的輸出如下:

$ gcc printStr.c -o printStr
$ ./printStr
$ Hello,World!

代碼1.1和代碼1.2完成的是相同的功能忠售,在C語(yǔ)言中使用了29行代碼實(shí)現(xiàn),而且代碼的含義并不直觀迄沫,反觀Python代碼稻扬,它只用了4行代碼,簡(jiǎn)潔明快羊瘩,容易理解泰佳,而代碼量非常少盼砍,這就是Guido Von Rossum想要實(shí)現(xiàn)的效果。

1.1.2 Python的主要版本

Python歷史上經(jīng)歷了0.X逝她、1.X衬廷、2.X和3.X等4個(gè)大的主要版本,其中的X表示小版本號(hào)汽绢,比如Python2就有2.0吗跋、2.4、2.5宁昭、2.6跌宛、2.7等版本。Python的主要版本誕生時(shí)間如表1.1所示』蹋現(xiàn)在世界上應(yīng)用的Python程序疆拘,使用的主要是Python 2.X和Python 3.X版本,使用這兩種Python大版本的應(yīng)用程序是并存的寂曹,但Python 2和Python 3并不兼容哎迄,這是由于在開發(fā)Python 2時(shí),計(jì)算機(jī)世界的很多新技術(shù)還未出現(xiàn)隆圆,Python 3提供了對(duì)這些新技術(shù)的支持漱挚,因此其不與Python 2 兼容。Python 2 將在 2020年停止支持渺氧,不再進(jìn)行開發(fā)旨涝。今后應(yīng)該主要學(xué)習(xí)和使用Python 3。不過侣背,由于Python 2和Python 3的設(shè)計(jì)理念是相同的白华,而且大部分內(nèi)容也相同,因此贩耐,從Python2開始學(xué)習(xí)也可以平滑地轉(zhuǎn)換到Python 3上弧腥。

Python版本號(hào) 誕生時(shí)間
世界上首個(gè)Python版本 1989年圣誕節(jié)
第一個(gè)公開發(fā)行的Python版本 1991年
Python 1.0 1994-01
Python 2.0 2000-10-16
Python 2.4 2004-11-30
Python 2.5 2006-09-19
Python 2.6 2008-10-01
Python 2.7 2010-07-03
Python 3.0 2008-12-03
Python 3.1 2009-06-27
Python 3.2 2011-02-20
Python 3.3 2012-09-29
Python 3.4 2014-03-16
Python 3.5 2015-09-13
Python 3.6 2016-12-23

1.2 Python是一種解釋型(腳本)語(yǔ)言

編程語(yǔ)言可以分成解釋型和編譯型兩種。實(shí)際上潮太,對(duì)于高級(jí)語(yǔ)言來說管搪,我們編寫的代碼都是為了更好地完成計(jì)算任務(wù)及讓人們更好的編寫和理解代碼而設(shè)計(jì)給人們使用的,因此編寫代碼這個(gè)步驟是面向人類的消别,也就是人類可讀寫的抛蚤。另一方面,還需要讓計(jì)算機(jī)理解和運(yùn)行程序寻狂,而計(jì)算機(jī)只理解0/1組成的代碼岁经,它并不能直接運(yùn)行人們編寫的高級(jí)語(yǔ)言代碼。如何解決這個(gè)問題呢蛇券?這就需要高級(jí)語(yǔ)言的解釋器或編譯器大顯身手了缀壤,這兩個(gè)東西都是將高級(jí)計(jì)算機(jī)語(yǔ)言翻譯成機(jī)器可執(zhí)行的代碼的工具樊拓。顯然,使用解釋器的就是解釋型語(yǔ)言塘慕,使用編譯器的就是編譯型語(yǔ)言了筋夏。二者的區(qū)別是解釋型語(yǔ)言運(yùn)行時(shí),形式上是直接運(yùn)行高級(jí)語(yǔ)言代碼图呢,解釋器在后臺(tái)逐條對(duì)高級(jí)語(yǔ)言代碼進(jìn)行解釋運(yùn)行条篷,多次運(yùn)行需要多次解釋;而編譯型語(yǔ)言的高級(jí)語(yǔ)言代碼一旦編寫除錯(cuò)完成蛤织,就使用編譯器對(duì)代碼進(jìn)行一次性地編譯赴叹,翻譯成機(jī)器可以執(zhí)行的代碼,供以后反復(fù)運(yùn)行指蚜,一次編譯可以多次運(yùn)行乞巧。編譯型語(yǔ)言的一個(gè)著名的例子就是C語(yǔ)言。

由于解釋型語(yǔ)言運(yùn)行時(shí)摊鸡,同時(shí)要進(jìn)行解釋和運(yùn)行的任務(wù)绽媒,而編譯型語(yǔ)言的編譯過程提前完成了,所以解釋型語(yǔ)言通常比編譯型語(yǔ)言的程序運(yùn)行速度慢免猾,而且慢得多是辕。

解釋型語(yǔ)言由于直接運(yùn)行高級(jí)語(yǔ)言代碼,像電影腳本那樣掸刊,按照文件預(yù)定的步驟免糕,一步一步完成處理任務(wù),所以也稱為腳本語(yǔ)言忧侧。

Python是一種解釋型(腳本)語(yǔ)言。它自從創(chuàng)生以來就風(fēng)靡了世界牌芋,取得了很大的成功蚓炬。為什么Python運(yùn)行速度慢,還能做到這樣的成功呢? 這就要從它的特點(diǎn)說起了躺屁。

1.3 Python的特點(diǎn)

1.3.1 Python代碼易讀肯夏、易寫、易懂犀暑、易調(diào)驯击、易改

Python的設(shè)計(jì)理念是"優(yōu)雅、簡(jiǎn)明耐亏、高效"徊都,我們?cè)谇懊嫠e的例子代碼1.1中可以充分地看到上述這一特點(diǎn)。由于Python是一種解釋型語(yǔ)言的特點(diǎn)广辰,執(zhí)行它不需要對(duì)其進(jìn)行編譯暇矫,代碼執(zhí)行過程中發(fā)現(xiàn)了問題主之,可以直接修改代碼進(jìn)行調(diào)試,而Python解釋器提供的錯(cuò)誤排查機(jī)制李根,增強(qiáng)了調(diào)試除錯(cuò)的功能槽奕,因此實(shí)際使用Python時(shí)感覺十分流暢,這種體驗(yàn)非常容易讓人上癮房轿。

1.3.2 Python功能強(qiáng)大粤攒、易擴(kuò)展、有豐富的專業(yè)庫(kù)

另外囱持,一方面Python好像是一個(gè)工具箱琼讽,官方Python語(yǔ)言及其標(biāo)準(zhǔn)庫(kù)就自帶很多好用的工具,如它的字符串處理能力洪唐,如列表钻蹬、元組、字典等數(shù)據(jù)結(jié)構(gòu)凭需,如列表解析问欠、函數(shù)的可變參數(shù)傳遞和多值返回、如動(dòng)態(tài)數(shù)據(jù)類型和自動(dòng)垃圾回收機(jī)制等內(nèi)容粒蜈。

同時(shí)顺献,其他組織和個(gè)人還可以為Python開發(fā)實(shí)現(xiàn)某項(xiàng)通用功能的軟件庫(kù),通過"第三方"擴(kuò)展模塊的方式為Python提供"擴(kuò)展的工具箱"枯怖。

由于Python本身十分強(qiáng)大注整,并且存在豐富的軟件庫(kù),每個(gè)想要實(shí)現(xiàn)某種特定任務(wù)的人度硝,都可以找到合適的軟件包進(jìn)行工作肿轨,而且由于軟件包常常十分強(qiáng)大,非常適合新手完成用其他語(yǔ)言很難完成的任務(wù)蕊程,用句俗話說 椒袍,就是非常容易上手。

進(jìn)一步說藻茂,Python用戶還可以在Python官方語(yǔ)言和豐富的第三方庫(kù)的基礎(chǔ)上自定義自己的"實(shí)用工具"驹暑,來增加自己可用的工具。因此辨赐,可以說Python具有靈活的擴(kuò)展性优俘,在各個(gè)行業(yè)領(lǐng)域都具有豐富的軟件庫(kù)可供使用。Python非常適用于具有各種專業(yè)背景的人士編寫計(jì)算機(jī)程序完成專業(yè)領(lǐng)域的運(yùn)算任務(wù)掀序。

表1.2列出了一些酷炫的Python軟件庫(kù):

軟件庫(kù) 功能
NLTK 人類語(yǔ)言處理
jieba 中文分詞工具
SnowNLP 一個(gè)處理中文文本的庫(kù)
pyocr 光學(xué)字符識(shí)別(把掃描的文字圖像轉(zhuǎn)換成字符串)
moviepy 一個(gè)用來進(jìn)行基于腳本的視頻編輯模塊帆焕,適用于多種格式,包括動(dòng)圖 GIFs
GeoDjango 世界級(jí)地理圖形 web 框架
django-shop 一個(gè)基于 Django 的店鋪系統(tǒng)
Cartridge 一個(gè)基于 Mezzanine 構(gòu)建的購(gòu)物車應(yīng)用
newspaper 使用 Python 進(jìn)行新聞提取森枪,文章提取以及內(nèi)容策展
PyCrypto Python 密碼學(xué)工具箱
Tkinter Tkinter 是 Python GUI 的一個(gè)事實(shí)標(biāo)準(zhǔn)庫(kù)
Panda3D 由迪士尼開發(fā)的 3D 游戲引擎视搏,并由卡內(nèi)基梅隆娛樂技術(shù)中心負(fù)責(zé)維護(hù)审孽。使用C++編寫, 針對(duì) Python 進(jìn)行了完全的封裝
PyOgre Ogre 3D 渲染引擎的 Python 綁定,可以用來開發(fā)游戲和仿真程序等任何 3D 應(yīng)用
astropy 一個(gè)天文學(xué) Python 庫(kù)
bccb 生物分析相關(guān)代碼集合
Neupy 執(zhí)行和測(cè)試各種不同的人工神經(jīng)網(wǎng)絡(luò)算法
NumPy 使用 Python 進(jìn)行科學(xué)計(jì)算的基礎(chǔ)包
ino 操作Arduino的命令行工具
Pyro Python 機(jī)器人編程庫(kù)

1.3.3 Python代碼簡(jiǎn)明浑娜,書寫效率高

Python語(yǔ)言本身設(shè)計(jì)得簡(jiǎn)明而高效佑力,而且由于各種強(qiáng)大的Python軟件庫(kù)的存在,它們已封裝了各種強(qiáng)大的功能筋遭,引入了這些庫(kù)之后打颤,實(shí)現(xiàn)專業(yè)領(lǐng)域的復(fù)雜任務(wù)常常只需數(shù)行甚至一行核心代碼就可解決問題,因此漓滔,Python代碼常常非常簡(jiǎn)明编饺,而且書寫效率相當(dāng)高,這一點(diǎn)响驴,在前面的代碼1-1已經(jīng)見識(shí)到了透且。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市豁鲤,隨后出現(xiàn)的幾起案子秽誊,更是在濱河造成了極大的恐慌,老刑警劉巖琳骡,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锅论,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡楣号,警方通過查閱死者的電腦和手機(jī)最易,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炫狱,“玉大人藻懒,你說我怎么就攤上這事”霞觯” “怎么了束析?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)憎亚。 經(jīng)常有香客問我,道長(zhǎng)弄慰,這世上最難降的妖魔是什么第美? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮陆爽,結(jié)果婚禮上什往,老公的妹妹穿的比我還像新娘。我一直安慰自己慌闭,他們只是感情好别威,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布躯舔。 她就那樣靜靜地躺著,像睡著了一般省古。 火紅的嫁衣襯著肌膚如雪粥庄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天豺妓,我揣著相機(jī)與錄音惜互,去河邊找鬼。 笑死琳拭,一個(gè)胖子當(dāng)著我的面吹牛训堆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播白嘁,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼坑鱼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了絮缅?” 一聲冷哼從身側(cè)響起鲁沥,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盟蚣,沒想到半個(gè)月后黍析,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屎开,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年阐枣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奄抽。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔼两,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逞度,到底是詐尸還是另有隱情额划,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布档泽,位于F島的核電站俊戳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏馆匿。R本人自食惡果不足惜抑胎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渐北。 院中可真熱鬧阿逃,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至破托,卻和暖如春肪跋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炼团。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工澎嚣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘟芝。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓易桃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親锌俱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晤郑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容