Python基礎之(初識)
一、python發展史
python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
- 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠呼叫C語言的庫檔案。從一出生,Python已經具有了:類,函式,異常處理,包含表和詞典在內的核心資料型別,以及模組為基礎的拓展系統。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
- Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言框架的基礎
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
- Python 3.6 - December 16,2016
二、Python是什麼程式語言
2.1、編譯型:一次性將所有程式編譯成二進位制檔案。
缺點:開發效率低,不能跨平臺。
優點:執行速度快。
C,C++,...
2.2、解釋型:當程式執行時,一行一行的解釋。
優點:開發效率高,可以跨平臺。
缺點:執行速度慢。
python ,php,...
三、Python優缺點
優點:
3.1、Python的定位是“優雅”、“明確”、“簡單”,所以Python程式看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。
3.2、開發效率非常高,Python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,Python官方庫裡都有相應的模組進行支援,直接下載呼叫後,在基礎庫的基礎上再進行開發,大大降低開發週期,避免重複造輪子。
3.3、高階語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節
3.4、可移植性————由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平臺上執行
3.5、可擴充套件性————如果你需要你的一段關鍵程式碼執行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。
3.6可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式使用者提供指令碼功能。
缺點:
3.7速度慢,Python 的執行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的執行速度慢在大多數情況下使用者是無法直接感知到的,必須藉助測試工具才能體現出來,比如你用C運一個程式花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程式速度的要求,除非你要寫對速度要求極高的搜尋引擎等,這種情況下,當然還是建議你用C去實現的。
3.8程式碼不能加密,因為PYTHON是解釋性語言,它的原始碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的專案要求原始碼必須是加密的,那你一開始就不應該用Python來去實現。
3.9執行緒不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全域性直譯器鎖(Global Interpreter Lock),是計算機程式設計語言直譯器用於同步執行緒的工具,使得任何時刻僅有一個執行緒在執行,Python的執行緒是作業系統的原生執行緒。在Linux上為pthread,在Windows上為Win thread,完全由作業系統排程執行緒的執行。一個python直譯器程序內有一條主執行緒,以及多條使用者程式的執行執行緒。即使在多核CPU平臺上,由於GIL的存在,所以禁止多執行緒的並行執行。關於這個問題的折衷解決方法,我們在以後執行緒和程序章節裡再進行詳細探討。
當我們編寫Python程式碼時,我們得到的是一個包含Python程式碼的以.py
為副檔名的文字檔案。要執行程式碼,就需要Python直譯器去執行.py
檔案。由於整個Python語言從規範到直譯器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python直譯器來執行Python程式碼(當然難度很大)。事實上,確實存在多種Python直譯器
四、Python 種類
CPython
當我們從Python官方網站下載並安裝好Python 3.6後,我們就直接獲得了一個官方版本的直譯器:CPython。這個直譯器是用C語言開發的,所以叫CPython。在命令列下執行python
就是啟動CPython直譯器。
CPython是使用最廣的Python直譯器。教程的所有程式碼也都在CPython下執行。
IPython
IPython是基於CPython之上的一個互動式直譯器,也就是說,IPython只是在互動方式上有所增強,但是執行Python程式碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但核心其實都是呼叫了IE。
CPython用>>>
作為提示符,而IPython用In [
序號
]:
作為提示符。
PyPy
PyPy是另一個Python直譯器,它的目標是執行速度。PyPy採用JIT技術,對Python程式碼進行動態編譯(注意不是解釋),所以可以顯著提高Python程式碼的執行速度。
絕大部分Python程式碼都可以在PyPy下執行,但是PyPy和CPython有一些是不同的,這就導致相同的Python程式碼在兩種直譯器下執行可能會有不同的結果。如果你的程式碼要放到PyPy下執行,就需要了解PyPy和CPython的不同點。
Jython
Jython是執行在Java平臺上的Python直譯器,可以直接把Python程式碼編譯成Java位元組碼執行。
IronPython
IronPython和Jython類似,只不過IronPython是執行在微軟.Net平臺上的Python直譯器,可以直接把Python程式碼編譯成.Net的位元組碼。
Python的直譯器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺互動,最好的辦法不是用Jython或IronPython,而是通過網路呼叫來互動,確保各程式之間的獨立性。
五、Python 入門
5.1、第一句Python程式碼
建立1.py檔案,內容如下:
print("hello world")
執行如下:(python 檔名)
5.2、直譯器
上一步中執行 python 1.py 時,明確的指出 1.py 指令碼由 python 直譯器來執行。
如果想要類似於執行shell指令碼一樣執行python指令碼,例: ./1.py
,那麼就需要在 hello.py 檔案的頭部指定直譯器,如:
#!/usr/bin/env python
print ("hello world")
5.3、內容編碼
python直譯器在載入 .py 檔案中的程式碼時,會對內容進行編碼(預設ascill)
ASCII(American Standard Code for Information Interchange,美國標準資訊交換程式碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多隻能用 8 位來表示(一個位元組),即:2**8 = 256,所以,ASCII碼最多隻能表示 256 個符號。
Bin(二進位制) | Oct(八進位制) | Dec(十進位制) | Hex(十六進位制) | 縮寫/字元 | 解釋 |
0000 0000 | 0 | 0 | 00 | NUL(null) | 空字元 |
0000 0001 | 1 | 1 | 01 | SOH(start of headline) | 標題開始 |
0000 0010 | 2 | 2 | 02 | STX (start of text) | 正文開始 |
0000 0011 | 3 | 3 | 03 | ETX (end of text) | 正文結束 |
0000 0100 | 4 | 4 | 04 | EOT (end of transmission) | 傳輸結束 |
0000 0101 | 5 | 5 | 05 | ENQ (enquiry) | 請求 |
0000 0110 | 6 | 6 | 06 | ACK (acknowledge) | 收到通知 |
0000 0111 | 7 | 7 | 07 | BEL (bell) | 響鈴 |
0000 1000 | 10 | 8 | 08 | BS (backspace) | 退格 |
0000 1001 | 11 | 9 | 09 | HT (horizontal tab) | 水平製表符 |
0000 1010 | 12 | 10 | 0A | LF (NL line feed, new line) | 換行鍵 |
0000 1011 | 13 | 11 | 0B | VT (vertical tab) | 垂直製表符 |
0000 1100 | 14 | 12 | 0C | FF (NP form feed, new page) | 換頁鍵 |
0000 1101 | 15 | 13 | 0D | CR (carriage return) | 回車鍵 |
0000 1110 | 16 | 14 | 0E | SO (shift out) | 不用切換 |
0000 1111 | 17 | 15 | 0F | SI (shift in) | 啟用切換 |
0001 0000 | 20 | 16 | 10 | DLE (data link escape) | 資料鏈路轉義 |
0001 0001 | 21 | 17 | 11 | DC1 (device control 1) | 裝置控制1 |
0001 0010 | 22 | 18 | 12 | DC2 (device control 2) | 裝置控制2 |
0001 0011 | 23 | 19 | 13 | DC3 (device control 3) | 裝置控制3 |
0001 0100 | 24 | 20 | 14 | DC4 (device control 4) | 裝置控制4 |
0001 0101 | 25 | 21 | 15 | NAK (negative acknowledge) | 拒絕接收 |
0001 0110 | 26 | 22 | 16 | SYN (synchronous idle) | 同步空閒 |
0001 0111 | 27 | 23 | 17 | ETB (end of trans. block) | 結束傳輸塊 |
0001 1000 | 30 | 24 | 18 | CAN (cancel) | 取消 |
0001 1001 | 31 | 25 | 19 | EM (end of medium) | 媒介結束 |
0001 1010 | 32 | 26 | 1A | SUB (substitute) | 代替 |
0001 1011 | 33 | 27 | 1B | ESC (escape) | 換碼(溢位) |
0001 1100 | 34 | 28 | 1C | FS (file separator) | 檔案分隔符 |
0001 1101 | 35 | 29 | 1D | GS (group separator) | 分組符 |
0001 1110 | 36 | 30 | 1E | RS (record separator) | 記錄分隔符 |
0001 1111 | 37 | 31 | 1F | US (unit separator) | 單元分隔符 |
0010 0000 | 40 | 32 | 20 | (space) | 空格 |
0010 0001 | 41 | 33 | 21 | ! | 歎號 |
0010 0010 | 42 | 34 | 22 | " | 雙引號 |
0010 0011 | 43 | 35 | 23 | # | 井號 |
0010 0100 | 44 | 36 | 24 | $ | 美元符 |
0010 0101 | 45 | 37 | 25 | % | 百分號 |
0010 0110 | 46 | 38 | 26 | & | 和號 |
0010 0111 | 47 | 39 | 27 | ' | 閉單引號 |
0010 1000 | 50 | 40 | 28 | ( | 開括號 |
0010 1001 | 51 | 41 | 29 | ) | 閉括號 |
0010 1010 | 52 | 42 | 2A | * | 星號 |
0010 1011 | 53 | 43 | 2B | + | 加號 |
0010 1100 | 54 | 44 | 2C | , | 逗號 |
0010 1101 | 55 | 45 | 2D | - | 減號/破折號 |
0010 1110 | 56 | 46 | 2E | . | 句號 |
00101111 | 57 | 47 | 2F | / | 斜槓 |
00110000 | 60 | 48 | 30 | 0 | 數字0 |
00110001 | 61 | 49 | 31 | 1 | 數字1 |
00110010 | 62 | 50 | 32 | 2 | 數字2 |
00110011 | 63 | 51 | 33 | 3 | 數字3 |
00110100 | 64 | 52 | 34 | 4 | 數字4 |
00110101 | 65 | 53 | 35 | 5 | 數字5 |
00110110 | 66 | 54 | 36 | 6 | 數字6 |
00110111 | 67 | 55 | 37 | 7 | 數字7 |
00111000 | 70 | 56 | 38 | 8 | 數字8 |
00111001 | 71 | 57 | 39 | 9 | 數字9 |
00111010 | 72 | 58 | 3A | : | 冒號 |
00111011 | 73 | 59 | 3B | ; | 分號 |
00111100 | 74 | 60 | 3C | < | 小於 |
00111101 | 75 | 61 | 3D | = | 等號 |
00111110 | 76 | 62 | 3E | > | 大於 |
00111111 | 77 | 63 | 3F | ? | 問號 |
01000000 | 100 | 64 | 40 | @ | 電子郵件符號 |
01000001 | 101 | 65 | 41 | A | 大寫字母A |
01000010 | 102 | 66 | 42 | B | 大寫字母B |
01000011 | 103 | 67 | 43 | C | 大寫字母C |
01000100 | 104 | 68 | 44 | D | 大寫字母D |
01000101 | 105 | 69 | 45 | E | 大寫字母E |
01000110 | 106 | 70 | 46 | F | 大寫字母F |
01000111 | 107 | 71 | 47 | G | 大寫字母G |
01001000 | 110 | 72 | 48 | H | 大寫字母H |
01001001 | 111 | 73 | 49 | I | 大寫字母I |
01001010 | 112 | 74 | 4A | J | 大寫字母J |
01001011 | 113 | 75 | 4B | K | 大寫字母K |
01001100 | 114 | 76 | 4C | L | 大寫字母L |
01001101 | 115 | 77 | 4D | M | 大寫字母M |
01001110 | 116 | 78 | 4E | N | 大寫字母N |
01001111 | 117 | 79 | 4F | O | 大寫字母O |
01010000 | 120 | 80 | 50 | P | 大寫字母P |
01010001 | 121 | 81 | 51 | Q | 大寫字母Q |
01010010 | 122 | 82 | 52 | R | 大寫字母R |
01010 |