# 認識 Python
> 人生苦短,我用 Python —— Life is short, you need Python

## 目標
* Python 的起源
* 為什么要用 Python?
* Python 的特點
* Python 的優缺點
## 01. Python 的起源
> Python 的創始人為吉多·范羅蘇姆(Guido van Rossum)

1. 1989 年的圣誕節期間,吉多·范羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的**解釋程序**,作為 ABC 語言的一種繼承(**感覺下什么叫牛人**)
2. ABC 是由吉多參加設計的一種教學語言,就吉多本人看來,ABC 這種語言非常優美和強大,是**專門為非專業程序員設計的**。但是 ABC 語言并沒有成功,究其原因,吉多認為是**非開放**造成的。吉多決心在 Python 中避免這一錯誤,并獲取了非常好的效果
3. 之所以選中 Python(蟒蛇) 作為程序的名字,是因為他是 BBC 電視劇——蒙提·派森的飛行馬戲團(Monty Python's Flying Circus)的愛好者
4. 1991 年,第一個 Python **解釋器** 誕生,它是用 C 語言實現的,并能夠調用 C 語言的庫文件
### 1.1 解釋器(科普)
**計算機不能直接理解任何除機器語言以外的語言**,所以必須要把程序員所寫的程序語言翻譯成機器語言,計算機才能執行程序。**將其他語言翻譯成機器語言的工具,被稱為編譯器**
編譯器翻譯的方式有兩種:一個是**編譯**,另外一個是**解釋**。兩種方式之間的區別在于**翻譯時間點的不同**。當編譯器**以解釋方式運行的時候**,也稱之為**解釋器**

* **編譯型語言**:程序在執行之前需要一個專門的編譯過程,把程序編譯成為機器語言的文件,運行時不需要重新翻譯,直接使用編譯的結果就行了。程序執行效率高,依賴編譯器,跨平臺性差些。如 C、C++
* **解釋型語言**:解釋型語言編寫的程序不進行預先編譯,以文本方式存儲程序代碼,會將代碼一句一句直接運行。在發布程序時,看起來省了道編譯工序,但是在運行程序的時候,必須先解釋再運行
#### 編譯型語言和解釋型語言對比
* **速度** —— 編譯型語言比解釋型語言執行速度快
* **跨平臺性** —— 解釋型語言比編譯型語言跨平臺性好
### 1.2 Python 的設計目標
1999 年,吉多·范羅蘇姆向 DARPA 提交了一條名為 “Computer Programming for Everybody” 的資金申請,并在后來說明了他對 Python 的目標:
* 一門**簡單直觀的語言**并與主要競爭者一樣強大
* **開源**,以便任何人都可以為它做貢獻
* 代碼**像純英語那樣容易理解**
* 適用于**短期**開發的日常任務
這些想法中的基本都已經成為現實,Python 已經成為一門流行的編程語言
### 1.3 Python 的設計哲學
1. 優雅
2. 明確
3. 簡單
<!-- > 在 Python 解釋器內運行 `import this` 可以獲得完整的列表 -->
* Python 開發者的哲學是:**用一種方法,最好是只有一種方法來做一件事**
* 如果面臨多種選擇,Python 開發者一般會拒絕花俏的語法,而選擇**明確沒有或者很少有歧義的語法**
> 在 Python 社區,吉多被稱為“仁慈的獨裁者”
## 02. 為什么選擇 Python?
* 代碼量少
* ……
> 同一樣問題,用不同的語言解決,代碼量差距還是很多的,一般情況下 `Python` 是 `Java` 的 **1/5**,所以說 **人生苦短,我用 Python**
## 03. Python 特點
* Python 是**完全面向對象的語言**
* **函數**、**模塊**、**數字**、**字符串**都是對象,**在 Python 中一切皆對象**
* 完全支持繼承、重載、多重繼承
* 支持重載運算符,也支持泛型設計
* Python **擁有一個強大的標準庫**,Python 語言的核心只包含 **數字**、**字符串**、**列表**、**字典**、**文件** 等常見類型和函數,而由 Python 標準庫提供了 **系統管理**、**網絡通信**、**文本處理**、**數據庫接口**、**圖形系統**、**XML 處理** 等額外的功能
* Python 社區提供了**大量的第三方模塊**,使用方式與標準庫類似。它們的功能覆蓋 **科學計算**、**人工智能**、**機器學習**、**Web 開發**、**數據庫接口**、**圖形系統** 多個領域
### 面向對象的思維方式
* **面向對象** 是一種 **思維方式**,也是一門 **程序設計技術**
* 要解決一個問題前,首先考慮 **由誰** 來做,怎么做事情是 **誰** 的職責,最后把事情做好就行!
* **對象** 就是 **誰**
* 要解決復雜的問題,就可以找**多個不同的對象**,**各司其職**,共同實現,最終完成需求
## 04. Python 的優缺點
### 4.1 優點
* 簡單、易學
* 免費、開源
* **面向對象**
* 豐富的庫
* 可擴展性
* 如果需要一段關鍵代碼運行得更快或者希望某些算法不公開,可以把這部分程序用 `C` 或 `C++` 編寫,然后在 `Python` 程序中使用它們
* ……
### 4.2 缺點
* 運行速度
* 國內市場較小
* 中文資料匱乏
- linux基礎
- 01_Python基礎課程安排
- 02_操作系統(科普章節)
- 03_操作系統的發展史(科普章節)
- 04_文件和目錄(理解)
- 05_Ubuntu圖形界面入門
- 06_常用Linux命令的基本使用
- 07_Linux終端命令格式
- 08_文件和目錄常用命令
- 09_遠程管理常用命令
- 10_用戶權限相關命令
- 11_系統信息相關命令
- 12_其他命令
- python基礎
- 01_認識 Python
- 02_第一個Python 程序
- 03_PyCharm的初始設置(知道)
- 04_多文件項目的演練
- 05_注釋
- 06_算數運算符
- 07_程序執行原理(科普)
- 08_變量的基本使用
- 09_變量的命名
- 10_判斷(if)語句
- 11_運算符
- 12_循環
- 13_函數基礎
- 14_高級變量類型
- 15_綜合應用——名片管理系統
- 16_變量進階(理解)
- 17_函數進階.md
- 面向對象
- 01_面向對象(OOP)基本概念
- 02_類和對象
- 03_面向對象基礎語法
- 04_面向對象封裝案例
- 05_面向對象封裝案例 II