- Python快速編程入門
- 黑馬程序員編著
- 3814字
- 2019-07-30 13:07:05
1.1 認(rèn)識Python
1.1.1 Python的發(fā)展歷程
Python的創(chuàng)始人為荷蘭的Guido van Rossum(見圖1-1)。1989年,Guido為了打發(fā)圣誕節(jié)的無趣,決心開發(fā)一個新的腳本解釋程序,作為ABC語言的一種繼承。之所以選中Python作為該編程語言的名字,是因為他是一個叫Monty Python喜劇團(tuán)體的愛好者。

圖1-1 Python創(chuàng)始人
ABC是由Guido參加設(shè)計的一種教學(xué)語言。就Guido本人看來,ABC這種語言非常優(yōu)美和強(qiáng)大,是專門為非專業(yè)程序員設(shè)計的。但是ABC語言并沒有成功,究其原因,Guido認(rèn)為是其非開放造成的。Guido決心在Python中避免這一錯誤,同時,他還想實現(xiàn)在ABC中閃現(xiàn)過但未曾實現(xiàn)的東西,就這樣,Python在Guido手中誕生了??梢哉f,Python是從ABC發(fā)展起來的,主要是受到了Modula-3的影響,并且結(jié)合了Unix shell和C的習(xí)慣。
1991年,Python第一個公開發(fā)行版本發(fā)行,它是一種面向?qū)ο蟮慕忉屝陀嬎銠C(jī)程序設(shè)計語言,它是使用C語言實現(xiàn)的,并且能夠調(diào)用C語言的庫文件。從一出生,Python已經(jīng)具有了類、函數(shù)、異常處理,包含列表和字典在內(nèi)的核心數(shù)據(jù)類型,以及模塊為基礎(chǔ)的拓展系統(tǒng)。
最初的Python完全由Guido本人開發(fā)。Python得到Guido同事的歡迎,他們迅速地反饋使用意見,并參與到Python的改進(jìn)中。Guido和一些同事構(gòu)成Python的核心團(tuán)隊,他們將自己大部分的業(yè)余時間用于發(fā)掘Python。隨后,Python拓展到研究所之外。Python將許多機(jī)器層面上的細(xì)節(jié)隱藏,交給編譯器處理,并凸顯出邏輯層面的編程思考。Python程序員可以花更多的時間用于思考程序的邏輯,而不是具體的實現(xiàn)細(xì)節(jié),這一特征吸引了廣大的程序員,Python開始流行。2011年1月,Python贏得TIOBE編程語言排行榜的年度語言。
1.1.2 Python的特點
Python具有以下顯著的特點。
(1)簡單易學(xué)
Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程序就感覺像是在讀英語段落一樣,盡管這個英語段落的語法要求非常嚴(yán)格。Python最大的優(yōu)點之一是具有偽代碼的本質(zhì),它使我們在開發(fā)Python程序時,專注的是解決問題,而不是搞明白語言本身。
(2)開源
Python是FLOSS(自由/開放源碼軟件)之一。簡單地說,你可以自由地發(fā)布這個軟件的拷貝,閱讀它的源代碼,對它做改動,把它的一部分用于新的自由軟件中。FLOSS 是基于一個團(tuán)體分享知識的概念,這是為什么Python如此優(yōu)秀的原因之一——它是由一群希望看到一個更加優(yōu)秀的Python的人創(chuàng)造并經(jīng)常改進(jìn)著的。
(3)高級語言
Python是高級語言。當(dāng)使用Python語言編寫程序時,無需再考慮諸如如何管理程序使用的內(nèi)存一類的底層細(xì)節(jié)。
(4)可移植性
由于Python的開源本質(zhì),它已經(jīng)被移植在許多平臺上。如果小心地避免使用依賴于系統(tǒng)的特性,那么所有Python程序無需修改就可以在下述任何平臺上運行。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acorn RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE,甚至還有PocketPC、Symbian以及Google基于Linux開發(fā)的Android平臺。
(5)解釋性
一個用編譯性語言如C或C++寫的程序可以從源文件(即C或C++語言)轉(zhuǎn)換到一個計算機(jī)使用的語言。這個過程通過編譯器和不同的標(biāo)記、選項完成。當(dāng)運行程序的時候,連接/轉(zhuǎn)載器軟件把程序從硬盤復(fù)制到內(nèi)存中并且運行。而Python語言寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運行程序。在計算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計算機(jī)使用的機(jī)器語言并運行。事實上,由于不再擔(dān)心如何編譯程序,如何確保連接轉(zhuǎn)載正確的庫等,這一切使得使用Python變得更加簡單。由于只需要把Python程序復(fù)制到另外一臺計算機(jī)上,它就可以工作了,這也使得Python程序更加易于移植。
(6)面向?qū)ο?/p>
Python既支持面向過程編程,也支持面向?qū)ο缶幊?。在“面向過程”的語言中,程序是由過程或僅僅是可重用代碼的函數(shù)構(gòu)建起來的。在“面向?qū)ο蟆钡恼Z言中,程序是由數(shù)據(jù)和功能組合而成的對象構(gòu)建起來的。與其他主要的語言如C++和Java相比,Python以一種非常強(qiáng)大又簡單的方式實現(xiàn)面向?qū)ο缶幊獭?/p>
(7)可擴(kuò)展性
如果需要一段關(guān)鍵代碼運行的更快或者希望某些算法不公開,就可以把部分程序用C或C++語言編寫,然后在Python程序中使用它們。
(8)豐富的庫
Python標(biāo)準(zhǔn)庫確實很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測試、線程、數(shù)據(jù)庫、網(wǎng)頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫以外,還有許多其他高質(zhì)量的庫,如wxPython、Twisted和Python圖像庫等。
(9)規(guī)范的代碼
Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有極佳的可讀性。
1.1.3 Python的應(yīng)用領(lǐng)域
Python應(yīng)用的領(lǐng)域包括如下場景。
(1)Web應(yīng)用開發(fā)
Python經(jīng)常被用于Web開發(fā)。例如,通過mod_wsgi模塊,Apache可以運行用Python編寫的Web程序。Python定義了WSGI標(biāo)準(zhǔn)應(yīng)用接口來協(xié)調(diào)HTTP服務(wù)器與基于Python的Web程序之間的通信。一些Web框架,如Django、TurboGears、web2py、Zope等,可以讓程序員輕松地開發(fā)和管理復(fù)雜的Web程序。
(2)操作系統(tǒng)管理、服務(wù)器運維的自動化腳本
在很多操作系統(tǒng)里,Python是標(biāo)準(zhǔn)的系統(tǒng)組件。大多數(shù)Linux發(fā)行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在終端下直接運行Python。有一些Linux發(fā)行版的安裝器使用Python語言編寫,如Ubuntu的Ubiquity安裝器,Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage(包管理系統(tǒng))。Python標(biāo)準(zhǔn)庫包含了多個調(diào)用操作系統(tǒng)功能的庫。通過pywin32這個第三方軟件包,Python能夠訪問Windows的COM服務(wù)及其他Windows API。使用IronPython,Python能夠直接調(diào)用.Net Framework。一般說來,Python編寫的系統(tǒng)管理腳本在可讀性、性能、代碼重用度、擴(kuò)展性幾方面都優(yōu)于普通的shell腳本。
(3)科學(xué)計算
NumPy、SciPy、Matplotlib可以讓Python程序員編寫科學(xué)計算程序。
(4)桌面軟件
PyQt、PySide、wxPython、PyGTK是Python快速開發(fā)桌面應(yīng)用程序的利器。
(5)服務(wù)器軟件(網(wǎng)絡(luò)軟件)
Python對于各種網(wǎng)絡(luò)協(xié)議的支持很完善,所以經(jīng)常被用于編寫服務(wù)器軟件、網(wǎng)絡(luò)爬蟲。第三方庫Twisted支持異步網(wǎng)絡(luò)編程和多數(shù)標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議(包含客戶端和服務(wù)器),并且提供了多種工具,被廣泛用于編寫高性能的服務(wù)器軟件。
(6)游戲
很多游戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫游戲的邏輯、服務(wù)器。相較于Python,Lua的功能更簡單,體積更??;而Python則支持更多的特性和數(shù)據(jù)類型。
(7)構(gòu)思實現(xiàn),產(chǎn)品早期原型和迭代
YouTube、Google、Yahoo!、NASA都在內(nèi)部大量地使用Python。
1.1.4 Python的版本
Python發(fā)展到現(xiàn)在,經(jīng)歷了多個版本,大家可以在Python官網(wǎng)查看。網(wǎng)址是https://www.python.org/downloads/。截至目前,仍然保留的版本主要是基于Python 2.x和Python 3.x。表1-1列舉了Python的歷史版本。
表1-1 Python歷史版本

續(xù)表

在本書成稿時,Python 2的最新版本是Python 2.7.13,Python 3的最新版本是Python 3.6。關(guān)于Python 2.x和Python 3.x的區(qū)別將在下個小節(jié)進(jìn)行介紹,這里大家只需知道,Python 3.x不再兼容現(xiàn)有的2.x程序,在實際使用時,大家要根據(jù)實際情況選擇使用的版本。
1.1.5 Python 2.x和Python 3.x版本區(qū)別
和Python 2.x版本相比,Python 3.x版本在語句輸出、編碼、運算和異常等方面做出了一些調(diào)整,具體如下。
1.print函數(shù)替代了print語句
在Python 2.x中,輸出數(shù)據(jù)使用的是print語句。但是在Python 3.x中,print語句沒有了,取而代之的是print函數(shù)。示例代碼如下:
Python 2.x
>>> print(3,4)
(3, 4)
Python 3.x
>>> print(3,4)
3 4
2.Python 3.x默認(rèn)使用UTF-8編碼
Python 2.x中有ASCII Str()類型,unicode()是單獨的,不是byte類型。在Python 3.x版本的源代碼中,默認(rèn)使用的是UTF-8編碼,從而可以很好地支持中文或其他非英文字符。例如,輸出一句中文,使用Python 2.x和Python 3.x的輸出結(jié)果如下所示:
Python 2.x
>>> str = "我愛北京天安門"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
Python 3.x
>>> str = "我愛北京天安門"
>>> str
'我愛北京天安門'
3.除法運算
和其他語言相比,Python語言的除法非常高端,它的除法運算包含兩個運算符,分別是/和//,這兩個運算符在Python 2.x和Python 3.x中的使用如下所示。
(1)運算符 /
在Python 2.x中,使用運算符/進(jìn)行除法運算的方式和Java、C語言相似,整數(shù)相除的結(jié)果是一個整數(shù),浮點數(shù)除法會保留小數(shù)點的部分得到一個浮點數(shù)的結(jié)果。但是,在Python 3.x中使用運算符/進(jìn)行除法運算,整數(shù)之間的相除,結(jié)果也會是浮點數(shù)。示例代碼如下:
Python 2.x
>>> 1 / 2
0
>>> 1.0 / 2.0
0.5
Python 3.x
>>> 1/2
0.5
(2)運算符//
使用運算符//進(jìn)行的除法運算叫作floor除法,這種除法會對除法的結(jié)果自動進(jìn)行一個floor操作。使用這種運算符進(jìn)行的除法運算,在Python 2.x和Python 3.x中是一致的。示例代碼如下:
Python 2.x
>>> -1 // 2
-1
Python 3.x
>>> -1 // 2
-1
需要注意的是,使用運算符//進(jìn)行的除法是執(zhí)行floor操作,即獲取不大于結(jié)果值的最大整數(shù)(向下取整)。
4.異常
在Python 3.x版本中,異常處理改變的地方主要如下。
(1)在Python 2.x版本中,所有類型的對象都是直接被拋出的,但是在Python 3.x版本中,只有繼承自BaseException的對象才可以被拋出。
(2)在Python 2.x版本中,捕獲異常的語法是“except Exception, var”。在Python 3.x版本中,引入了as關(guān)鍵字,捕獲異常的語法變更為“except Exception as var”。
(3)在Python 2.x版本中,處理異常使用“raise Exception(args)”;在Python 3.x版本中,處理異常使用“raise Exception, args”。
(4)Python 3.x版本中取消了異常類的序列行為和.message屬性。
關(guān)于Python 2.x版本中和Python 3.x版本中處理異常的示例代碼如下:
Python 2.x
>>> try:
... raise TypeError,"類型錯誤"
... except TypeError,err:
... print err.message
...
類型錯誤
Python 3.x
>>> try:
... raise TypeError("類型錯誤")
... except TypeError as err:
... print(err)
...
類型錯誤
5.八進(jìn)制字面量表示
在Python 3.x中,表示八進(jìn)制字面量的方式只有一種,并且必須寫成“0o1000”這樣的方式,原來“01000”的方式不能使用了。示例代碼如下:
Python 2.x
>>> 0o1000
512
>>> 01000
512
Python 3.x
>>> 01000
File "<stdin>", line 1
01000
^
SyntaxError: invalid token
>>> 0o1000
512
6.不等于運算符
Python 2.x的不等于運算符有兩種寫法:!= 和 <>,但是,Python 3.x中去掉了<>, 只有!=一種寫法。示例代碼如下:
Python 2.x
>>> 1!=2
True
>>> 1<>2
True
Python 3.x
>>> 1!=2
True
>>> 1<>2
File "<stdin>", line 1
1<>2
^
SyntaxError: invalid syntax
>>>
7.數(shù)據(jù)類型
Python中數(shù)據(jù)類型的改變?nèi)缦隆?/p>
(1)Python 3.x去除了long類型,現(xiàn)在只有一種整型int,但它的行為就像是Python 2.x版本的long。
(2)Python 3.x新增了bytes類型,對應(yīng)于Python 2.x版本的八位串,定義一個bytes字面量的方法如下所示:
>>> b = b'china'
>>> type(b)
<type 'bytes'>
字符串對象和bytes對象可以使用.encode() (str→bytes) 或者 .decode() (bytes→str)方法相互轉(zhuǎn)化。示例代碼如下:
>>> s = b.decode()
>>> s
'china'
>>> b1 = s.encode()
>>> b1
b'china'
(3)Python 3.x中,字典的keys()、items()和values()方法用返回視圖代替了列表,而2.x版本中的iterkeys()等函數(shù)都被廢棄。同時去掉的還有has_key()方法,用in替代。
- OpenDaylight Cookbook
- MySQL 8從入門到精通(視頻教學(xué)版)
- C語言程序設(shè)計實訓(xùn)教程
- Web Application Development with R Using Shiny(Second Edition)
- 深入理解Java7:核心技術(shù)與最佳實踐
- Visual C++串口通信技術(shù)詳解(第2版)
- Redis Essentials
- Python貝葉斯分析(第2版)
- Python機(jī)器學(xué)習(xí)編程與實戰(zhàn)
- Building a Quadcopter with Arduino
- C/C++程序員面試指南
- 并行編程方法與優(yōu)化實踐
- 從Power BI到Analysis Services:企業(yè)級數(shù)據(jù)分析實戰(zhàn)
- Photoshop CC移動UI設(shè)計案例教程(全彩慕課版·第2版)
- Visual C++從入門到精通(第2版)