1. 程式人生 > >Python基礎之(初識)

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 增加了 lambdamapfilter 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