Python入門知識

Python語言簡述

Python簡史

  Python 是由 Guido van Rossum (龜叔) 在1989年,爲了打發聖誕節假期而創做的。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。java

版本python

Python 1.0 - January 1994 增長了 lambda, map, filter and reduce.shell

Python 2.0 - October 16, 2000,加入了內存回收機制,構成了如今Python語言框架的基礎vim

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, 2010ide

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環境安裝:

下載地址:https://www.python.org/downloads/

安裝時 勾選Add Python3.6 to PATH選項(就自動講Python添加到環境變量)

Linux / OS X 環境安裝:

Python2.x版本  系統原生自帶

Python3.x 若是原生不帶Python3.X版本 前往官網下載 地址同上

 第一個Python程序——hello world!

每一個語言的第一個程序,都像一個儀式~ 咱們致敬一下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的方式執行腳本了

完整代碼爲:

1 #!/usr/bin/env python3
2 #_*_ coding: utf-8 _*_
3 
4 print('hello world!\n')
View Code

其中「 #_*_ 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 到九、標點符號,以及在美式英語中使用的特殊控制字符  。在標準ASCII中,其最高位(b7)用做奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程當中用來檢驗是否出現錯誤的一種方法,通常分奇校驗和偶校驗兩種。奇校驗規定:正確的代碼一個字節中1的個數必須是奇數,若非奇數,則在最高位b7添0;偶校驗規定:正確的代碼一個字節中1的個數必須是偶數,若非偶數,則在最高位b7添1  。
  最後128個字符稱爲擴展ASCII碼。許多基於x86的系統都支持使用擴展(或「高」)ASCII。擴展ASCII 碼容許將每一個字符的第8 位用於肯定附加的128 個特殊符號字符、外來語字母和圖形符號。

GBK編碼

  《漢字內碼擴展規範》(GBK) 於1995年制定,兼容GB23十二、GB13000-一、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的一種持久化保存方式。

相關文章
相關標籤/搜索