Python語言簡述
Python簡史
Python 是由 Guido van Rossum (龜叔) 在1989年,為了打發圣誕節假期而創作的,Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus,他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言,1991年,第一個Python編譯器誕生,它是用C語言實作的,并能夠呼叫C語言的庫檔案,從一出生,Python已經具有了:類,函式,例外處理,包含表和詞典在內的核心資料型別,以及模塊為基礎的拓展系統,
版本
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
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 - june 13, 2016
Python 3.7 - Sept. 19, 2017
Python 3.8 - Feb. 3, 2019
Python語言型別
Python是動態語言,是強型別定義語言(是型別安全的語言) 是一門腳本語言
- 編譯型
優點:編譯器一般會有預編譯的程序對代碼進行優化,因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程式執行效率高,可以脫離語言環境獨立運行,
缺點:編譯之后如果需要修改就需要整個模塊重新編譯,編譯的時候根據對應的運行環境生成機器碼,不同的作業系統之間移植就會有問題,需要根據運行的作業系統環境編譯不同的可執行檔案,
- 解釋型
優點:有良好的平臺兼容性,在任何環境中都可以運行,前提是安裝了解釋器(虛擬機),靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護,
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言,
- 強型別定義語言
在宣告或定義變數時為變數指定某個資料型別,如果不經過強制轉換,那么它就永遠是這個資料型別,
- 弱型別定義語言
資料型別可以被忽略的語言,它與強型別定義語言相反, 一個變數可以賦不同資料型別的值,例如js
- 動態型別
動態型別語言型別的檢查是在運行時做的,型別對于變數,屬性,方法以及方法的回傳型別都做不要求,只有當變數被賦值時由值來確定它的型別, 之后,還可以賦值不同型別的值,例如Python、Ruby、JavaScript等,
- 靜態型別
靜態型別語言的型別檢查是在運行前的編譯階段做的,例如C/C++、java、C#都是靜態型別的語言,靜態型別語言為了達到多型會采取一些型別鑒別手段,如繼承、介面,而動態型別語言卻不需要,也就是動態型別語言天生就具有多型的特性,
Python語言特點
- 高級語言————無需考慮暫存器和記憶體等一類的底層細節,
- 可移植性————Python已經被移植到大多數平臺上,這意味著代碼可以輕易的移植到其他平臺上,
- 可擴展性————可以用C/C++撰寫時間復雜度大的模塊進行性能和功能上的優化和拓展,然后用Python來呼叫,
- 可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式用戶提供腳本功能,
- 開發效率非常高,擁有豐富的第三方庫,大大降低開發周期,避免重復造輪子,
- Python代碼“優雅”、“明確”、“簡單”,所以Python程式看上去總是簡單易懂,不但對初學者非常友入門門容易,而且支持復雜的專案開發,
- 速度慢,Python 的運行速度比java慢,比C/C++更慢,但是很多時候,Python 的效率完完全全可以滿足用戶的性能需求,
- Python由于GIL即全域解釋器鎖(Global Interpreter Lock)的存在,使得任意時刻僅能有一個執行緒在執行,極大限制了Python的性能,
Python的版本問題
python2.x 和 Python3.x
Python2.x版本中原始碼不標準,混亂,重復代碼太多,語言的特性體現的并不是很強,并且字符編碼采用ASCII碼,局限性大,但是相對于早期的Python版本,Python3.0版本是一個較大的升級,為了不帶入過多的累贅,Python 3.0在設計的時候向下兼容并沒有作為很重要的標準,力求讓Python代碼更為標準、簡潔、嚴謹、優雅,充分體現Python 的語言特性,所以早期Python版本設計的程式大多無法在Python 3.0上正常執行,由于Python早期就已經積累了大量的外部模塊、一些大的專案基于Python2.x版本,版本的遷移是一個大的問題,外部模塊經常無法很短時間內跟進Python的版本,為了照顧現有程式,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函式,因此從2.x向3.x遷移是一個痛苦的程序,
Python安裝
Windows環境安裝:
下載地址
安裝時 勾選Add Python3.6 to PATH選項(就自動講Python添加到環境變數)
Linux / OS X 環境安裝:
Python2.x版本 系統原生自帶
Python3.x 如果原生不帶Python3.X版本 前往官網下載 地址同上
download Python
每個語言的第一個程式,都像一個儀式~ 我們致敬一下Python~!
在終端創建hello.py檔案 并寫入以下代碼:
print(“hello world!\n”)
在終端執行: python3 hello.py 命令 會出現 hello world! 結果
JIAdeMacBook-Air:~ monkey$ vim hello.py
JIAdeMacBook-Air:~ monkey$ python3 hello.py
hello world!
命令中“python3” 告訴系統用python3解釋器 來執行這個檔案
如果想直接運行這個檔案 要在檔案的第一行 加上解釋器的位置告訴系統由誰來執行這個檔案,
#!/usr/bin/env python3
添加之后 給檔案執行權限chmod 755 hello.py
這樣就可以通過./hello.py的方式執行腳本了
完整代碼為:
#!/usr/bin/env python3
#_*_ coding: utf-8 _*_
print('hello world!\n')
其中#_*_ coding: utf-8 _*_告訴解釋器 編碼方式為 utf-8,
因為 在Python2.x版本中默認的是ASCII編碼,是不支持中文的,即使是在注釋中也不行,所以要在開頭指明這個python檔案的編碼方式以支持中文,
字符編碼問題
詳細解釋一下上面提到編碼的問題,我們知道所有的檔案在計算機上存盤都是以01二進制存盤的, n位二進制數可以組合成2的n次方個不同的資訊,給每個資訊規定一個具體碼組,這種程序也叫編碼,
ASCII碼
ASCII 碼使用指定的7 位或8 位二進制陣列合來表示128 或256 種可能的字符,
標準ASCII 碼也叫基礎ASCII碼,使用7 位二進制數(剩下的1位二進制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號,以及在美式英語中使用的特殊控制字符 ,在標準ASCII中,其最高位(b7)用作奇偶校驗位,所謂奇偶校驗,是指在代碼傳送程序中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種,奇校驗規定:正確的代碼一個位元組中1的個數必須是奇數,若非奇數,則在最高位b7添0;偶校驗規定:正確的代碼一個位元組中1的個數必須是偶數,若非偶數,則在最高位b7添1 ,
最后128個字符稱為擴展ASCII碼,許多基于x86的系統都支持使用擴展(或“高”)ASCII,擴展ASCII 碼允許將每個字符的第8 位用于確定附加的128 個特殊符號字符、外來語字母和圖形符號,
GBK編碼
《漢字內碼擴展規范》(GBK) 于1995年制定,兼容GB2312、GB13000-1、BIG5 編碼中的所有漢字,使用雙字節編碼,編碼空間為 0x8140~0xFEFE,共有 23940 個碼位,其中 GBK1 區和 GBK2 區也是 GB2312 的編碼范圍,收錄了 21003 個漢字,GBK向下與 GB 2312 編碼兼容,向上支持 ISO 10646.1國際標準,是前者向后者過渡程序中的一個承上啟下的產物,ISO 10646 是國際標準化組織ISO 公布的一個編碼標準,即 Universal Multilpe-Octet Coded Character Set(簡稱UCS),大陸譯為《通用多八位編碼字符集》,臺灣譯為《廣用多八位元編碼字元集》,它與 Unicode 組織的Unicode編碼完全兼容,ISO 10646.1 是該標準的第一部分《體系結構與基本多文種平面》,我國 1993 年以 GB 13000.1 國家標準的形式予以認可(即 GB 13000.1 等同于 ISO 10646.1)
Unicode編碼
Unicode(統一碼、萬國碼、單一碼)是計算機科學領域里的一項業界標準,包括字符集、編碼方案等,Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每字符設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求,1990年開始研發,1994年正式公布,
Unicode能夠使計算機實作跨語言、跨平臺的文本轉換及處理,
UTF-8
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼,由Ken Thompson于1992年創建,現在已經標準化為RFC 3629,UTF-8用1到6個位元組編碼Unicode字符,用在網頁上可以統一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文),
Python代碼的執行程序
Python解釋器分類
CPython解釋器
當我們從Python官方網站下載并安裝好Python 3.x后,我們就直接獲得了一個官方版本的解釋器:CPython,這個解釋器是用C語言開發的,所以叫CPython,在命令列下運行python就是啟動CPython解釋器,
CPython是使用最廣的Python解釋器,教程的所有代碼也都在CPython下執行,
IPython解釋器
IPython是基于CPython之上的一個互動式解釋器,也就是說,IPython只是在互動方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的,
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解釋器的作業原理
解釋器由一個編譯器和一個虛擬機構成,編譯器負責將源代碼轉換成位元組碼檔案,而虛擬機負責執行位元組碼,所以,解釋型語言其實也有編譯程序,只不過這個編譯程序并不是直接生成目標代碼,而是中間代碼(位元組碼),然后再通過虛擬機來逐行解釋執行位元組碼
Python源程式的執行程序
執行 python XX.py (python3 xx.py),python解釋器的編譯器會將.py源檔案編譯(解釋)成位元組碼生成PyCo3deObject位元組碼物件存放在記憶體中,
python解釋器的虛擬機將執行記憶體中的位元組碼物件轉化為機器語言,虛擬機與作業系統互動,使機器語言在機器硬體上運行,
運行結束后python解釋器則將PyCodeObject寫回到.pyc檔案中,當python程式第二次運行時,首先程式會在硬碟中尋找pyc檔案,如果找到,則直接載入,否則就重復上面的程序,
這樣一來可以省去每次都將Python腳本檔案轉成位元組碼的程序,所以我們應該這樣來定位PyCodeObject和pyc檔案,我們說pyc檔案其實是PyCodeObject的一種持久化保存方式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/119149.html
標籤:Python
