Python基础教程
目錄
一、Python編程基礎
?1、?編程語言是什么
?2 、編譯型語言和解釋型語言的區別
2.1、編譯型語言
2.2、解釋型語言
2.4關于 Python
2.5總結
?3 、Python是什么
?4 、Python有哪些優點和缺點?
4.1、Python 的優點
4.2、Python 的缺點
?5、?學Python能干什么,Python的應用領
5.1、Web應用開發
5.2、自動化運維
5.3、人工智能領域
5.4、網路爬蟲
5.5、科學計算
5.6、游戲開發
6、Python 3和Python 2的區別
6.1、Python 3.x print函數代替了print語句
6.2、Python 3.x 默認使用 UTF-8 編碼
6.3、Python 3.x 除法運算
6.4、Python 3.x 異常
6.5、Python 3.x 八進制字面量表示
6.6、Python 3.x 不等于運算符
6.7、Python 3.x 數據類型
二、Python編程環境搭建
三、變量類型和運算符
四、列表、元組、字典和集合
五、Python字符串常用方法
六、Python流程控制
七、函數和lambda表達式
八、Python類和對象
九、類特殊成員(屬性和方法)
十、Python異常處理機制
十一、Python模塊和包
一、Python編程基礎
?1、 編程語言是什么
其實,程序指的就是一系列指令,用來告訴計算機做什么,而編寫程序的關鍵在于,我們需要用計算機可以理解的語言來提供這些指令。
雖然借助 Siri(Apple)、Google Now(Android)、Cortana(Microsoft)等技術,我們可以使用漢語直接告訴計算機做什么,比如“Siri,打開酷狗音樂”,但使用過這些系統的讀者都知道,它尚未完全成熟,再加上我們語言充滿了模糊和不精確因素,使得設計一個完全理解人類語言的計算機程序,仍然是一個有待解決的問題。
為了有效避開所有影響給計算機傳遞指令的因素,計算機科學家設計了一些符號,這些符號各有其含義,且之間無二義性,通常稱它們為編程語言。編程語言中的每個結構,都有固定的使用格式(稱為語法)以及精確的含義(稱為語義)。換句話說,編程語言指定了成套的規則,用來編寫計算機可以理解的指令。習慣上,我們將這一條條指令稱為計算機代碼,而用編程語言來編寫算法的過程稱為編碼。
本教程要講解的 Python?就是一種編程語言,除此之外,你肯定也聽說過其他一些編程語言,如 C、C++、Java、Ruby 等。至今,計算機科學家已經開發了成百上千種編程語言,且隨著時間演變,這些編程語言又產生了多個不同的版本。但無論是哪個編程語言,也無論有多少個版本,雖然它們在細節上可能有所不同,無疑它們都有著固定的、無二義性的語法和語義。
以上提到的編程語言,都是高級計算機語言,設計它們的目的是為了方便程序員理解和使用。但嚴格來說,計算機硬件只能理解一種非常低級的編程語言,稱為機器語言。
比如說,讓計算機對 2 個數做求和操作,那么 CPU 可能要執行以下指令:
可以看到,對 2 個數執行求和操作需要做這么多工作,且這還只是籠統地描述,實際會更加復雜。
而使用 Python 這樣的高級語言,對 2 個數求和可以很自然地用 c = a + b 表示,但由此帶來的問題是,我們需要設計一種方法,將高級語言翻譯成計算機可以執行的機器語言,有兩種方法可以實現,分別是使用編譯器和解釋器。
使用編譯器將自身等效轉換成機器語言的高級語言,通常稱為編譯型語言;而使用解釋器將自身轉換成機器語言的高級語言,稱為解釋型語言,Python 就是解釋型編程語言的一種。
?2 、編譯型語言和解釋性語言的區別
我們編寫的源代碼是人類語言,我們自己能夠輕松理解;但是對于計算機硬件(CPU),源代碼就是天書,根本無法執行,計算機只能識別某些特定的二進制指令,在程序真正運行之前必須將源代碼轉換成二進制指令。
所謂的二進制指令,也就是機器碼,是 CPU 能夠識別的硬件層面的“代碼”,簡陋的硬件(比如古老的單片機)只能使用幾十個指令,強大的硬件(PC 和智能手機)能使用成百上千個指令。
然而,究竟在什么時候將源代碼轉換成二進制指令呢?不同的編程語言有不同的規定:
- 有的編程語言要求必須提前將所有源代碼一次性轉換成二進制指令,也就是生成一個可執行程序(Windows 下的 .exe),比如C語言、C++、Golang、Pascal(Delphi)、匯編等,這種編程語言稱為編譯型語言,使用的轉換工具稱為編譯器。
- 有的編程語言可以一邊執行一邊轉換,需要哪些源代碼就轉換哪些源代碼,不會生成可執行程序,比如 Python、JavaScript、PHP?、Shell、MATLAB?等,這種編程語言稱為解釋型語言,使用的轉換工具稱為解釋器。
簡單理解,編譯器就是一個“翻譯工具”,類似于將中文翻譯成英文、將英文翻譯成俄文。但是,翻譯源代碼是一個復雜的過程,大致包括詞法分析、語法分析、語義分析、性能優化、生成可執行文件等五個步驟,期間涉及到復雜的算法和硬件架構。解釋器與此類似,有興趣的讀者請參考《編譯原理》一書,本文不再贅述。
Java 和 C#?是一種比較奇葩的存在,它們是半編譯半解釋型的語言,源代碼需要先轉換成一種中間文件(字節碼文件),然后再將中間文件拿到虛擬機中執行。Java 引領了這種風潮,它的初衷是在跨平臺的同時兼顧執行效率;C# 是后來的跟隨者,但是 C# 一直止步于 Windows 平臺,在其它平臺鮮有作為。
那么,編譯型語言和解釋型語言各有什么特點呢?它們之間有什么區別?
2.1、編譯型語言
對于編譯型語言,開發完成以后需要將所有的源代碼都轉換成可執行程序,比如 Windows 下的.exe文件,可執行程序里面包含的就是機器碼。只要我們擁有可執行程序,就可以隨時運行,不用再重新編譯了,也就是“一次編譯,無限次運行”。
在運行的時候,我們只需要編譯生成的可執行程序,不再需要源代碼和編譯器了,所以說編譯型語言可以脫離開發環境運行。
編譯型語言一般是不能跨平臺的,也就是不能在不同的操作系統之間隨意切換。
編譯型語言不能跨平臺表現在兩個方面:
1) 可執行程序不能跨平臺
可執行程序不能跨平臺很容易理解,因為不同操作系統對可執行文件的內部結構有著截然不同的要求,彼此之間也不能兼容。不能跨平臺是天經地義,能跨平臺反而才是奇葩。
比如,不能將 Windows 下的可執行程序拿到 Linux 下使用,也不能將 Linux 下的可執行程序拿到 Mac OS 下使用(雖然它們都是類Linux)。
另外,相同操作系統的不同版本之間也不一定兼容,比如不能將 x64 程序(Windows 64 位程序)拿到 x86 平臺(Windows 32 位平臺)下運行。但是反之一般可行,因為 64 位 Windows 對 32 位程序作了很好的兼容性處理。
2) 源代碼不能跨平臺
不同平臺支持的函數、類型、變量等都可能不同,基于某個平臺編寫的源代碼一般不能拿到另一個平臺下編譯。我們以C語言為例來說明。
【實例1】在C語言中要想讓程序暫停可以使用“睡眠”函數,在 Windows 平臺下該函數是 Sleep(),在 Linux 平臺下該函數是 sleep(),首字母大小寫不同。其次,Sleep() 的參數是毫秒,sleep() 的參數是秒,單位也不一樣。
以上兩個原因導致使用暫停功能的C語言程序不能跨平臺,除非在代碼層面做出兼容性處理,非常麻煩。
【實例2】雖然不同平臺的C語言都支持 long 類型,但是不同平臺的 long 的長度卻不同,例如,Windows 64 位平臺下的 long 占用 4 個字節,Linux 64 位平臺下的 long 占用 8 個字節。
我們在 Linux 64 位平臺下編寫代碼時,將 0x2f1e4ad23 賦值給 long 類型的變量是完全沒有問題的,但是這樣的賦值在 Windows 平臺下就會導致數值溢出,讓程序產生錯誤的運行結果。
讓人苦惱的,這樣的錯誤一般不容易察覺,因為編譯器不會報錯,我們也記不住不同類型的取值范圍。
2.2、解釋型語言
對于解釋型語言,每次執行程序都需要一邊轉換一邊執行,用到哪些源代碼就將哪些源代碼轉換成機器碼,用不到的不進行任何處理。每次執行程序時可能使用不同的功能,這個時候需要轉換的源代碼也不一樣。
因為每次執行程序都需要重新轉換源代碼,所以解釋型語言的執行效率天生就低于編譯型語言,甚至存在數量級的差距。計算機的一些底層功能,或者關鍵算法,一般都使用 C/C++ 實現,只有在應用層面(比如網站開發、批處理、小工具等)才會使用解釋型語言。
在運行解釋型語言的時候,我們始終都需要源代碼和解釋器,所以說它無法脫離開發環境。
當我們說“下載一個程序(軟件)”時,不同類型的語言有不同的含義:
- 對于編譯型語言,我們下載到的是可執行文件,源代碼被作者保留,所以編譯型語言的程序一般是閉源的。
- 對于解釋型語言,我們下載到的是所有的源代碼,因為作者不給源代碼就沒法運行,所以解釋型語言的程序一般是開源的。
相比于編譯型語言,解釋型語言幾乎都能跨平臺,“一次編寫,到處運行”是真是存在的,而且比比皆是。那么,為什么解釋型語言就能快平臺呢?
這一切都要歸功于解釋器!
我們所說的跨平臺,是指源代碼跨平臺,而不是解釋器跨平臺。解釋器用來將源代碼轉換成機器碼,它就是一個可執行程序,是絕對不能跨平臺的。
官方需要針對不同的平臺開發不同的解釋器,這些解釋器必須要能夠遵守同樣的語法,識別同樣的函數,完成同樣的功能,只有這樣,同樣的代碼在不同平臺的執行結果才是相同的。
你看,解釋型語言之所以能夠跨平臺,是因為有了解釋器這個中間層。在不同的平臺下,解釋器會將相同的源代碼轉換成不同的機器碼,解釋器幫助我們屏蔽了不同平臺之間的差異。
2.4關于 Python
Python 屬于典型的解釋型語言,所以運行 Python?程序需要解釋器的支持,只要你在不同的平臺安裝了不同的解釋器,你的代碼就可以隨時運行,不用擔心任何兼容性問題,真正的“一次編寫,到處運行”。
Python 幾乎支持所有常見的平臺,比如 Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC 等,你所寫的 Python 代碼無需修改就能在這些平臺上正確運行。也就是說,Python 的可移植性是很強的。
2.5總結
我們將編譯型語言和解釋型語言的差異總結為下表:
| 編譯型語言 | 通過專門的編譯器,將所有源代碼一次性轉換成特定平臺(Windows、Linux 等)執行的機器碼(以可執行文件的形式存在)。 | 編譯一次后,脫離了編譯器也可以運行,并且運行效率高。 | 可移植性差,不夠靈活。 |
| 解釋型語言 | 由專門的解釋器,根據需要將部分源代碼臨時轉換成特定平臺的機器碼。 | 跨平臺性好,通過不同的解釋器,將相同的源代碼解釋成不同平臺下的機器碼。 | 一邊執行一邊轉換,效率很低。 |
?3 、Python是什么
編程語言有“高低”之分,而高級語言又有很多種,比如 C++、Java、C#、PHP、JavaScript?等,Python?也是其中之一。從本節開始,我們將正式開始學習 Python 這門高級編程語言,但是在此之前,我們有必要先討論一下“Python 是什么”。
Python 英文原意為“蟒蛇”,直到 1989 年荷蘭人 Guido van Rossum (簡稱 Guido)發明了一種面向對象的解釋型編程語言,并將其命名為 Python,才賦予了它表示一門編程語言的含義。
我們將在《編譯型和解釋型語言的區別》一文中講解什么是解釋型語言。
?Python 的標志(Logo)
說道 Python,它的誕生是極具戲曲性的,據 Guido 的自述記載,Python 語言是他在圣誕節期間為了打發時間開發出來的,之所以會選擇 Python 作為該編程語言的名字,是因為他是一個叫 Monty Python 戲劇團體的忠實粉絲。
Python 語言是在 ABC 教學語言的基礎上發展來的;遺憾的是,ABC 語言雖然非常強大,但卻沒有普及應用,Guido 認為是它不開放導致的。
基于這個考慮,Guido 在開發 Python 時,不僅為其添加了很多 ABC 沒有的功能,還為其設計了各種豐富而強大的庫,利用這些 Python 庫,程序員可以把使用其它語言制作的各種模塊(尤其是C語言和 C++)很輕松地聯結在一起,因此 Python 又常被稱為“膠水”語言。
這里的庫和模塊,簡單理解就是一個個的源文件,每個文件中都包含可實現各種功能的方法(也可稱為函數)。
從整體上看,Python 語言最大的特點就是簡單,該特點主要體現在以下 2 個方面:
- Python 語言的語法非常簡潔明了,即便是非軟件專業的初學者,也很容易上手。
- 和其它編程語言相比,實現同一個功能,Python 語言的實現代碼往往是最短的。
對于 Python,網絡上流傳著“人生苦短,我用 Python”的說法。
因此,看似 Python 是“不經意間”開發出來的,但絲毫不比其它編程語言差。事實也是如此,自 1991 年 Python 第一個公開發行版問世后:
- 2004 年起 Python 的使用率呈線性增長,不斷受到編程者的歡迎和喜愛;
- 2010 年,Python 榮膺 TIOBE 2010 年度語言桂冠;
- 2017 年,IEEE Spectrum 發布的 2017 年度編程語言排行榜中,Python 位居第 1 位。
直至現在(2019 年 12 月份),根據 TIOBE 排行榜的顯示,Python 也居于第 3 位,且有繼續提升的態勢(如表 2 所示)。
?
| 1 | 1 | Java | 17.253% | ?+1.32% |
| 2 | 2 | C | 16.086% | ?+1.80% |
| 3 | 3 | Python | 10.308% | ?+1.93% |
| 4 | 4 | C++ | 6.196% | ?-1.37% |
| 5 | 6 | C# | 4.801% | ?+1.35% |
| 6 | 5 | Visual Basic .NET | 4.743% | ?-2.38% |
| 7 | 7 | JavaScript | 2.090% | ?-0.97% |
| 8 | 8 | PHP | 2.048% | ?-0.39% |
| 9 | 9 | SQL | 1.843% | ?-0.34% |
| 10 | 14 | Swift | 1.490% | ?+0.27% |
| 11 | 17 | Ruby | 1.314% | ?+0.21% |
| 12 | 11 | Delphi/Object Pascal | 1.280% | ?-0.12% |
| 13 | 10 | Objective-C | 1.204% | ?-0.27% |
| 14 | 12 | Assembly language | 1.067% | ?-0.30% |
| 15 | 15 | Go | 0.995% | ?-0.19% |
| 16 | 16 | R | 0.995% | ?-0.12% |
| 17 | 13 | MATLAB | 0.986% | ?-0.30% |
| 18 | 25 | D | 0.930% | ?+0.42% |
| 19 | 19 | Visual Basic | 0.929% | ?-0.05% |
| 20 | 18 | Perl | 0.899% | ?-0.11% |
顯然,Python 已經將 C++ 語言甩在了后邊,直逼 C 語言和 Java,而且未來有可能超越它們,成為編程語言排行榜冠軍。
我們不妨再看一下 Python 歷年來的市場份額變化曲線,Python 的未來大勢可期。
?
圖 2?Python 歷年來市場份額變化曲線
錯過了 C/C++ 的 PC 時代,又錯過了 Java 的互聯網和智能手機時代,你還想錯過 Python 的人工智能和大數據時代嗎?Python 正位于軟件產業的第四次風口之上,把握好風口,你就能飛起來。
?4 、Python有哪些優點和缺點
Python?是一種面向對象的、解釋型的、通用的、開源的腳本編程語言,它之所以非常流行,我認為主要有三點原因:
- Python 簡單易用,學習成本低,看起來非常優雅干凈;
- Python 標準庫和第三庫眾多,功能強大,既可以開發小工具,也可以開發企業級應用;
- Python 站在了人工智能和大數據的風口上,站在風口上,豬都能飛起來。
舉個簡單的例子來說明一下 Python 的簡單。比如要實現某個功能,C語言可能需要 100 行代碼,而 Python 可能只需要幾行代碼,因為C語言什么都要得從頭開始,而 Python 已經內置了很多常見功能,我們只需要導入包,然后調用一個函數即可。
簡單就是 Python 的巨大魅力之一,是它的殺手锏,用慣了 Python 再用C語言簡直不能忍受。
本文就來匯總一下 Python 的特性,綜合對比一下它的優缺點。
4.1、Python 的優點
1) 語法簡單
和傳統的 C/C++、Java、C#?等語言相比,Python 對代碼格式的要求沒有那么嚴格,這種寬松使得用戶在編寫代碼時比較舒服,不用在細枝末節上花費太多精力。我來舉兩個典型的例子:
- Python 不要求在每個語句的最后寫分號,當然寫上也沒錯;
- 定義變量時不需要指明類型,甚至可以給同一個變量賦值不同類型的數據。
這兩點也是 PHP、JavaScript、MATLAB?等常見腳本語言都具備的特性。
Python 是一種代表極簡主義的編程語言,閱讀一段排版優美的 Python 代碼,就像在閱讀一個英文段落,非常貼近人類語言,所以人們常說,Python 是一種具有偽代碼特質的編程語言。
偽代碼(Pseudo Code)是一種算法描述語言,它介于自然語言和編程語言之間,使用偽代碼的目的是為了使被描述的算法可以容易地以任何一種編程語言(Pascal,C,Java,etc)實現。因此,偽代碼必須結構清晰、代碼簡單、可讀性好,并且類似自然語言。
如果你學過數據結構,閱讀過嚴蔚敏的書籍,那你一定知道什么是偽代碼。
為什么說簡單就是殺手锏?一旦簡單了,一件事情就會變得很純粹;我們在開發 Python 程序時,可以專注于解決問題本身,而不用顧慮語法的細枝末節。在簡單的環境中做一件純粹的事情,那簡直是一種享受。
2) Python 是開源的
開源,也即開放源代碼,意思是所有用戶都可以看到源代碼。
Python 的開源體現在兩方面:
① 程序員使用 Python 編寫的代碼是開源的。
比如我們開發了一個 BBS 系統,放在互聯網上讓用戶下載,那么用戶下載到的就是該系統的所有源代碼,并且可以隨意修改。這也是解釋型語言本身的特性,想要運行程序就必須有源代碼。
② Python 解釋器和模塊是開源的。
官方將 Python 解釋器和模塊的代碼開源,是希望所有 Python 用戶都參與進來,一起改進 Python 的性能,彌補 Python 的漏洞,代碼被研究的越多就越健壯。
這個世界上總有那么一小撮人,他們或者不慕名利,或者為了達到某種目的,會不斷地加強和改善 Python。千萬不要認為所有人都是只圖眼前利益的,總有一些精英會放長線釣大魚,總有一些極客會做一些炫酷的事情。
3) Python 是免費的
開源并不等于免費,開源軟件和免費軟件是兩個概念,只不過大多數的開源軟件也是免費軟件;Python 就是這樣一種語言,它既開源又免費。
用戶使用 Python 進行開發或者發布自己的程序,不需要支付任何費用,也不用擔心版權問題,即使作為商業用途,Python 也是免費的。
4) Python 是高級語言
這里所說的高級,是指 Python 封裝較深,屏蔽了很多底層細節,比如 Python 會自動管理內存(需要時自動分配,不需要時自動釋放)。
高級語言的優點是使用方便,不用顧慮細枝末節;缺點是容易讓人淺嘗輒止,知其然不知其所以然。
5) Python 是解釋型語言,能跨平臺
解釋型語言一般都是跨平臺的(可移植性好),Python 也不例外,我們已經在《編譯型語言和解釋型語言的區別》中進行了講解,這里不再贅述。
5) Python 是面向對象的編程語言
面向對象是現代編程語言一般都具備的特性,否則在開發中大型程序時會捉襟見肘。
Python 支持面向對象,但它不強制使用面向對象。Java 是典型的面向對象的編程語言,但是它強制必須以類和對象的形式來組織代碼。
6) Python 功能強大(模塊眾多)
Python 的模塊眾多,基本實現了所有的常見的功能,從簡單的字符串處理,到復雜的 3D 圖形繪制,借助 Python 模塊都可以輕松完成。
Python 社區發展良好,除了 Python 官方提供的核心模塊,很多第三方機構也會參與進來開發模塊,這其中就有 Google、Facebook、Microsoft 等軟件巨頭。即使是一些小眾的功能,Python 往往也有對應的開源模塊,甚至有可能不止一個模塊。
7) Python 可擴展性強
Python 的可擴展性體現在它的模塊,Python 具有腳本語言中最豐富和強大的類庫,這些類庫覆蓋了文件 I/O、GUI、網絡編程、數據庫訪問、文本操作等絕大部分應用場景。
這些類庫的底層代碼不一定都是 Python,還有很多 C/C++ 的身影。當需要一段關鍵代碼運行速度更快時,就可以使用 C/C++ 語言實現,然后在 Python 中調用它們。Python 能把其它語言“粘”在一起,所以被稱為“膠水語言”。
Python 依靠其良好的擴展性,在一定程度上彌補了運行效率慢的缺點。
4.2、Python 的缺點
除了上面提到的各種優點,Python 也是有缺點的。
1) 運行速度慢
運行速度慢是解釋型語言的通病,Python 也不例外。
Python 速度慢不僅僅是因為一邊運行一邊“翻譯”源代碼,還因為 Python 是高級語言,屏蔽了很多底層細節。這個代價也是很大的,Python 要多做很多工作,有些工作是很消耗資源的,比如管理內存。
Python 的運行速度幾乎是最慢的,不但遠遠慢于 C/C++,還慢于 Java。
但是速度慢的缺點往往也不會帶來什么大問題。首先是計算機的硬件速度運來越快,多花錢就可以堆出高性能的硬件,硬件性能的提升可以彌補軟件性能的不足。
其次是有些應用場景可以容忍速度慢,比如網站,用戶打開一個網頁的大部分時間是在等待網絡請求,而不是等待服務器執行網頁程序。服務器花 1ms 執行程序,和花 20ms 執行程序,對用戶來說是毫無感覺的,因為網絡連接時間往往需要 500ms 甚至 2000ms。
2) 代碼加密困難
不像編譯型語言的源代碼會被編譯成可執行程序,Python 是直接運行源代碼,因此對源代碼加密比較困難。
開源是軟件產業的大趨勢,傳統程序員需要轉變觀念。
?5、學Python能干什么,Python的應用領域
Python 作為一種功能強大的編程語言,因其簡單易學而受到很多開發者的青睞。那么,Python 的應用領域有哪些呢?
Python 的應用領域非常廣泛,幾乎所有大中型互聯網企業都在使用 Python 完成各種各樣的任務,例如國外的 Google、Youtube、Dropbox,國內的百度、新浪、搜狐、騰訊、阿里、網易、淘寶、知乎、豆瓣、汽車之家、美團等等。
概括起來,Python 的應用領域主要有如下幾個。
5.1、Web應用開發
Python?經常被用于 Web 開發,盡管目前 PHP、JS 依然是 Web 開發的主流語言,但 Python 上升勢頭更猛勁。尤其隨著 Python 的 Web 開發框架逐漸成熟(比如 Django、flask、TurboGears、web2py 等等),程序員可以更輕松地開發和管理復雜的 Web 程序。
例如,通過 mod_wsgi 模塊,Apache 可以運行用 Python 編寫的 Web 程序。Python 定義了 WSGI 標準應用接口來協調 HTTP 服務器與基于 Python 的 Web 程序之間的通信。
舉個最直觀的例子,全球最大的搜索引擎 Google,在其網絡搜索系統中就廣泛使用 Python 語言。另外,我們經常訪問的集電影、讀書、音樂于一體的豆瓣網(如圖 1 所示),也是使用 Python 實現的。
圖 1 用 Python 實現的豆瓣網
不僅如此,全球最大的視頻網站 Youtube 以及 Dropbox(一款網絡文件同步工具)也都是用 Python 開發的。
5.2、自動化運維
很多操作系統中,Python 是標準的系統組件,大多數 Linux 發行版以及 NetBSD、OpenBSD 和 Mac OS X 都集成了 Python,可以在終端下直接運行 Python。
有一些 Linux 發行版的安裝器使用 Python 語言編寫,例如 Ubuntu 的 Ubiquity 安裝器、Red Hat Linux 和 Fedora 的 Anaconda 安裝器等等。
另外,Python 標準庫中包含了多個可用來調用操作系統功能的庫。例如,通過 pywin32 這個軟件包,我們能訪問 Windows 的 COM 服務以及其他 Windows API;使用 IronPython,我們能夠直接調用 .Net Framework。
通常情況下,Python 編寫的系統管理腳本,無論是可讀性,還是性能、代碼重用度以及擴展性方面,都優于普通的 shell 腳本。
5.3、人工智能領域
人工智能是項目非常火的一個研究方向,如果要評選當前最熱、工資最高的 IT 職位,那么人工智能領域的工程師最有話語權。而 Python 在人工智能領域內的機器學習、神經網絡、深度學習等方面,都是主流的編程語言。
可以這么說,基于大數據分析和深度學習發展而來的人工智能,其本質上已經無法離開 Python 的支持了,原因至少有以下幾點:
VS Code 是微軟推出的一款代碼編輯工具(IDE),有關它的下載、安裝和使用,后續章節會做詳細介紹。
總之,AI 時代的來臨,使得 Python 從眾多編程語言中脫穎而出,Python 作為 AI 時代頭牌語言的位置,基本無人可撼動!
5.4、網路爬蟲
Python 語言很早就用來編寫網絡爬蟲。Google 等搜索引擎公司大量地使用 Python 語言編寫網絡爬蟲。
從技術層面上將,Python 提供有很多服務于編寫網絡爬蟲的工具,例如 urllib、Selenium 和 BeautifulSoup 等,還提供了一個網絡爬蟲框架 Scrapy。
5.5、科學計算
自 1997 年,NASA 就大量使用 Python 進行各種復雜的科學運算。
并且,和其它解釋型語言(如 shell、js、PHP)相比,Python 在數據分析、可視化方面有相當完善和優秀的庫,例如 NumPy、SciPy、Matplotlib、pandas 等,這可以滿足 Python 程序員編寫科學計算程序。
5.6、游戲開發
很多游戲使用 C++?編寫圖形顯示等高性能模塊,而使用 Python 或 Lua 編寫游戲的邏輯。和 Python 相比,Lua 的功能更簡單,體積更小;而 Python 則支持更多的特性和數據類型。
比如說,國際上指明的游戲 Sid Meier's Civilization(文明,如圖 2 所示)就是使用 Python 實現的。
圖 2 Python 開發的游戲
除此之外,Python 可以直接調用 Open GL 實現 3D 繪制,這是高性能游戲引擎的技術基礎。事實上,有很多 Python 語言實現的游戲引擎,例如 Pygame、Pyglet 以及 Cocos 2d 等。
?
以上也僅是介紹了 Python 應用領域的“冰山一角”,例如,還可以利用 Pygame? 進行游戲編程;用 PIL 和其他的一些工具進行圖像處理;用 PyRo 工具包進行機器人控制編程,等等。有興趣的讀者,可自行搜索資料進行詳細了解。
6、Python 3和Python 2的區別?
和 Python?2.x 版本相比,Python 3.x 版本在語句輸出、編碼、運算和異常等方面做出了一些調整,本節就對這些調整一一做一下簡單介紹。
本節適合有 Python 基礎的學員閱讀,初學者可先跳過本節,整體學完 Python 之后,再回過頭來閱讀。
6.1、Python 3.x print函數代替了print語句
在 Python2.x 中,輸出數據使用的是 Print 語句,例如:
>>> print "3,4"
3,4
或者
>>> print(3,4)
(3,4)
但是在 Python 3.x 中,print 語句沒有了,取而代之的是 print 函數,例如:
>>> print(3,4)
3 4
如果還像 Python 2.x 中那樣使用 print 語句,Python 編譯器就會報錯,例如:
>>> print "3,4"
? File "<stdin>", line 1
??? print "3,4"
????????????? ^
SyntaxError: Missing parentheses in call to 'print'
6.2、Python 3.x 默認使用 UTF-8 編碼
相比 Python 2.x 默認采用的 ASCII 編碼,Python 3.x 默認使用 UTF-8 編碼,可以很好地支持中文或其它非英文字符。
例如,輸出一句中文,使用 Python 2.x 和 Python 3.x 的區別如下:
#Python 2.x
>>>str ="C語言中文網"
>>>str
'C\xe8\xaf\xad\xe8\xa8\x80\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91'
#Python 3.x
>>>str ="C語言中文網"
>>>str
'C語言中文網'
不僅如此,在 Python 3.x 中,下面的代碼也是合法的:
>>>中國="China"
>>>print(中國)
China
6.3、Python 3.x 除法運算
和其他語言相比,Python 的除法運算要高端很多,它的除法運算包含 2 個運算符,分別是 / 和 //,這 2 個運算符在 Python 2.x 和 Python 3.x 的使用方法如下:
?/ 運算符
在 Python 2.x 中,使用運算符 / 進行除法運算的方式和 Java、C 語言類似,整數相除的結果仍是一個整數,浮點數除法會保留小數點部分,例如:
>>>1/2
0
>>>1.0/2
0.5
但是在 Python 3.x 中使用 / 運算符,整數之間做除法運算,結果也會是浮點數。例如:
>>>1/2
0.5
運算符 //
使用運算符 // 進行的除法運算叫做 floor 除法,也就是輸出不大于結果值的一個最大的整數(向下取整)。此運算符的用法在 Python 2.x 和Python 3.x 中是一樣的,舉個例子:
#Python 2.x
>>> -1//2
-1
#Python 3.x
>>> -1//2
-1
6.4、Python 3.x 異常
在 Python 3.x 版本中,異常處理改變的地方主要在以下幾個方面:
有關 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)
...
類型錯誤
6.5、Python 3.x 八進制字面量表示
在 Python 3.x 中,表示八進制字面量的方式只有一種,并且必須寫成“0o1000”這樣的方式,原來“01000”的方式不能使用了。舉個例子:
#Python 2.x
>>> 0o1000
512
>>> 01000
512
#Python 3.x
>>> 01000
? File "<stdin>", line 1
??? 01000
??????? ^
SyntaxError: invalid token
>>> 0o1000
512
6.6、Python 3.x 不等于運算符
Python 2.x 中的不等于運算符有 2 種寫法,分別為 != 和 <>,但在 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
6.7、Python 3.x 數據類型
Python 3.x 中對數據類型也做了改動,比如說:
- Python 3.x 去除了 long 類型,現在只有一種整形 int,但它的行為就像是 Python 2.x 版本中的 long。
- Python 3.x 新增了 bytes 類型,對應 Python 2.x 版本的八位串,定義 bytes 字面量的方法如下所示:
>>>b=b'China'
字符串對象和 bytes 對象可以使用 .encode() 或者 .decode()方法相互轉化,例如: >>>s=b.decode()
>>>type(b)
<type 'bytes'>
>>>s
'China'
>>>b1=s.encode()
>>>b1
b'China' - Python 3.x 中,字典的 keys()、items() 和 values() 方法用返回迭代器,且之前的 iterkeys() 等函數都被廢棄。同時去掉的還有 dict.has_key(),改為用 in 替代。
總結
以上是生活随笔為你收集整理的Python基础教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何避免B端产品失败(近万字解析)
- 下一篇: 什么是python语言的解释性?