溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python【1】:python介紹,歷史,解釋器,語(yǔ)言分析

發(fā)布時(shí)間:2020-05-26 15:40:43 來(lái)源:網(wǎng)絡(luò) 閱讀:460 作者:PythonAV 欄目:編程語(yǔ)言

python介紹

Python(英國(guó)發(fā)音:/?pa?θ?n/ 美國(guó)發(fā)音:/?pa?θɑ?n/), 是一種面向?qū)ο蟆⒔忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,由Guido van Rossum于1989年發(fā)明,第一個(gè)公開發(fā)行版發(fā)行于1991年。
Python是純粹的自由軟件, 源代碼和解釋器CPython遵循 GPL(GNU General Public License)協(xié)議。

一,pytho發(fā)展史

1989年的圣誕節(jié)期間,為了打發(fā)在阿姆斯特丹時(shí)間,吉多·范羅蘇姆(Guido van Rossum)決心開發(fā)一個(gè)新的腳本解釋程序(Python語(yǔ)言的編譯器),作為ABC語(yǔ)言的一種繼承。Python這個(gè)名字,來(lái)自Guido所摯愛的電視劇Monty Python’s Flying Circus。
他對(duì)Python的期望是:介于C和shell之間,功能全面,易學(xué)易用,可拓展。
1991年,第一個(gè)Python編譯器誕生。它是用C語(yǔ)言實(shí)現(xiàn)的,并能夠調(diào)用C語(yǔ)言的庫(kù)文件。Python創(chuàng)生之初便具有了:類,函數(shù),異常處理,包含表和詞典在內(nèi)的核心數(shù)據(jù)類型,以及模塊為基礎(chǔ)的拓展系統(tǒng)。
1994年1月,發(fā)布Python 1.0,增加了 lambda, map, filter and reduce.
1999年,Python的第一個(gè)web框架Zope 1發(fā)布,Granddaddy of Python web frameworks was released in 1999.
2000年10月16日,發(fā)布Python 2.0,加入了內(nèi)存回收機(jī)制,構(gòu)成了現(xiàn)在Python語(yǔ)言框架的基礎(chǔ)
2004年11月30日,發(fā)布Python 2.4,同年目前最流行的WEB框架Django 誕生
2006年9月19日,發(fā)布Python 2.5
2008年10月1日,發(fā)布Python 2.6,同年12月3日,發(fā)布Python 3.0
2009年6月27日,發(fā)布Python 3.1
2010年7月3日,發(fā)布Python 2.7
2011年2月20日,發(fā)布Python 3.2
2012年9月29日,發(fā)布Python 3.3
2014年3月16日,發(fā)布Python 3.4
2014年11月,官方宣布:Python2.7將在2020年停止支持,且不再有2.8及以上的版本,建議現(xiàn)有2.x版本的需要遷移到3.4及以上版本
2015年9月13日,發(fā)布Python 3.5
2016年12月23日,發(fā)布Python 3.6.0,目前最新版本為3.6.3,發(fā)布時(shí)間為20171003.
更新的3.7版本正在計(jì)劃發(fā)布中

Python的官方網(wǎng)址為:https://www.python.org

Python的web框架
Being the grandaddy of Python web frameworks, Zope has grown into a family of frameworks over the years. Zope 1 was released in 1999. Zope 2 is both a web framework and a general purpose application server, today it is primarily used by ContentManagementSystems. Zope 3 is both a standalone framework and a collection of related libraries, which are also included with newer releases of Zope 2. All of the Zope frameworks include the ZODB, an object database for Python.

百度百科:
https://baike.baidu.com/item/Python/407313?fr=aladdin
維基百科:
https://wiki.python.org/moin/
tiobe排行榜
https://www.tiobe.com/tiobe-index/

二,Python的應(yīng)用領(lǐng)域

技術(shù)領(lǐng)域

1.系統(tǒng)運(yùn)維

Python在與操作系統(tǒng)結(jié)合以及管理中非常密切,目前所有l(wèi)inux發(fā)行版中都帶有python,且對(duì)于linux中相關(guān)的管理功能都有大量的模塊可以使用,例如目前主流的自動(dòng)化配置管理工具:SaltStack Ansible(目前是RedHat的)。目前在幾乎所有互聯(lián)網(wǎng)公司,自動(dòng)化運(yùn)維的標(biāo)配就是python+Django/flask,另外,在虛擬化管理方面已經(jīng)是事實(shí)標(biāo)準(zhǔn)的openstack就是python實(shí)現(xiàn)的,所以Python是所有運(yùn)維人員的必備技能。
python已經(jīng)成為自動(dòng)化運(yùn)維平臺(tái)領(lǐng)域的實(shí)施標(biāo)準(zhǔn)

2.WEB開發(fā)

python相比php\ruby的模塊化設(shè)計(jì),非常便于功能擴(kuò)展;
有大量?jī)?yōu)秀的web開發(fā)框架,并且在不斷迭代,如:
Django框架:是目前最火的Python web框架,Django官方的標(biāo)語(yǔ)把Django定義為the framework for perfectionist with deadlines(大意是一個(gè)為完美主義者開發(fā)的高效率web框架)
Flask,bottle框架:短小精悍
Tornado框架:支持異步高并發(fā)
3.云計(jì)算
云計(jì)算最火的語(yǔ)言, 典型應(yīng)用OpenStack

4.網(wǎng)絡(luò)編程

支持高并發(fā)的Twisted網(wǎng)絡(luò)框架, py3引入的asyncio使異步編程變的非常簡(jiǎn)單

5.爬蟲

爬蟲領(lǐng)域,Python幾乎是霸主地位,Scrapy\Request\BeautifuSoap\urllib等,想爬啥就爬啥

6.科學(xué)運(yùn)算,大數(shù)據(jù)

Python相對(duì)于其它解釋性語(yǔ)言最大的特點(diǎn)是其龐大而活躍的科學(xué)計(jì)算生態(tài)
1997年開始,NASA就在大量使用Python在進(jìn)行各種復(fù)雜的科學(xué)運(yùn)算,隨著NumPy, SciPy, Matplotlib, Enthought librarys等眾多程序庫(kù)的開發(fā),使的Python越來(lái)越適合于做科學(xué)計(jì)算、繪制高質(zhì)量的2D和3D圖像。
和科學(xué)計(jì)算領(lǐng)域最流行的商業(yè)軟件Matlab相比,Python是一門通用的程序設(shè)計(jì)語(yǔ)言,比Matlab所采用的腳本語(yǔ)言的應(yīng)用范圍更廣泛
在數(shù)據(jù)分析、交互、可視化方面有相當(dāng)完善和優(yōu)秀的庫(kù)(python數(shù)據(jù)分析棧:Numpy Pandas Scipy Matplotlip Ipython)
形成了自己獨(dú)特的面向科學(xué)計(jì)算的Python發(fā)行版Anaconda,而且這幾年一直在快速進(jìn)化和完善,對(duì)傳統(tǒng)的數(shù)據(jù)分析語(yǔ)言如R MATLAB SAS Stata形成了非常強(qiáng)的替代性。

7.金融

金融分析,量化交易,在金融工程領(lǐng)域,Python不但在用,且用的最多,而且重要性逐年提高。
原因:作為動(dòng)態(tài)語(yǔ)言的Python,語(yǔ)言結(jié)構(gòu)清晰簡(jiǎn)單,庫(kù)豐富,成熟穩(wěn)定,科學(xué)計(jì)算和統(tǒng)計(jì)分析都很牛逼,生產(chǎn)效率遠(yuǎn)遠(yuǎn)高于c,c++,java,尤其擅長(zhǎng)策略回測(cè)

8.人工智能

基于大數(shù)據(jù)分析和深度學(xué)習(xí)而發(fā)展出來(lái)的人工智能本質(zhì)上已經(jīng)無(wú)法離開python的支持
目前世界優(yōu)秀的人工智能學(xué)習(xí)框架如Google的TransorFlow 、FaceBook的PyTorch以及開源社區(qū)的神經(jīng)網(wǎng)絡(luò)庫(kù)Karas等是用python實(shí)現(xiàn)的
微軟的CNTK(認(rèn)知工具包)也完全支持Python,而且微軟的Vscode都已經(jīng)把Python作為第一級(jí)語(yǔ)言進(jìn)行支持。

9.圖形GUI

PyQT, WxPython,TkInter

10.游戲開發(fā)

在網(wǎng)絡(luò)游戲開發(fā)中Python也有很多應(yīng)用。相比Lua or C++,Python 比 Lua 有更高階的抽象能力,可以用更少的代碼描述游戲業(yè)務(wù)邏輯,與 Lua 相比,Python 更適合作為一種 Host 語(yǔ)言,即程序的入口點(diǎn)是在 Python 那一端會(huì)比較好,然后用 C/C++ 在非常必要的時(shí)候?qū)懸恍U(kuò)展。Python 非常適合編寫 1 萬(wàn)行以上的項(xiàng)目,而且能夠很好地把網(wǎng)游項(xiàng)目的規(guī)??刂圃?10 萬(wàn)行代碼以內(nèi)。
知名的游戲<文明> 就是用Python寫的

行業(yè)應(yīng)用

Python在一些公司和組織的應(yīng)用
豆瓣:公司幾乎所有的業(yè)務(wù)均是通過(guò)Python開發(fā)的
知乎:國(guó)內(nèi)最大的問答社區(qū),通過(guò)Python開發(fā)(國(guó)外Quora)
春雨醫(yī)生:國(guó)內(nèi)知名的在線醫(yī)療網(wǎng)站是用Python開發(fā)的
谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項(xiàng)目都在大量使用Python開發(fā)
YouTube:世界上最大的視頻網(wǎng)站YouTube就是用Python開發(fā)的
Facebook:大量的基礎(chǔ)庫(kù)均通過(guò)Python實(shí)現(xiàn)的
Dropbox:美國(guó)最大的在線云存儲(chǔ)網(wǎng)站,全部用Python實(shí)現(xiàn),每天網(wǎng)站處理10億個(gè)文件的上傳和下載
Instagram:美國(guó)最大的圖片分享社交網(wǎng)站,每天超過(guò)3千萬(wàn)張照片被分享,全部用python開發(fā)
Redhat:世界上最流行的Linux發(fā)行版本中的yum包管理工具就是用python開發(fā)的
CIA:美國(guó)中情局網(wǎng)站是用Python開發(fā)的
NASA:美國(guó)航天局(NASA)大量使用Python進(jìn)行數(shù)據(jù)分析和運(yùn)算
搜狐、金山、騰訊、盛大、網(wǎng)易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務(wù)。

Python的特點(diǎn)及優(yōu)缺點(diǎn)

Python語(yǔ)言的特點(diǎn)

python是一門動(dòng)態(tài)解釋性的強(qiáng)類型定義語(yǔ)言

Python缺點(diǎn)

1)速度較C語(yǔ)言慢
Python運(yùn)行速度相比C語(yǔ)言確實(shí)慢很多,跟JAVA相比也要慢一些,但其實(shí)這里所指的運(yùn)行速度慢在大多數(shù)情況下我們是無(wú)法直接感知到的,必須借助測(cè)試工具才能體現(xiàn)出來(lái),大多數(shù)情況下Python已經(jīng)完全可以滿足我們對(duì)程序速度的要求,但是如果要寫對(duì)速度要求極高的搜索引擎等,當(dāng)然還是建議用C去實(shí)現(xiàn)。
Tips:
比如,用C運(yùn)一個(gè)程序花了0.01s,用Python是0.1s,這樣,雖然C語(yǔ)言直接比Python快了10倍,但是我們是無(wú)法直接通過(guò)肉眼感知的,因?yàn)橐粋€(gè)正常人所能感知的時(shí)間最小單位也才是是0.15-0.4s左右

2)代碼不能加密
因?yàn)镻YTHON是解釋性語(yǔ)言,所以它的源碼都是以明文形式存放的。
但是,如果項(xiàng)目要求源代碼必須是加密的,那么我們一開始就不應(yīng)該選擇用Python來(lái)去實(shí)現(xiàn),所以這個(gè)其實(shí)不能算作是Python的缺點(diǎn)。

3)線程不能利用多CPU問題
這是Python被人詬病最多的一個(gè)缺點(diǎn),GIL即全局解釋器鎖(Global Interpreter Lock),是計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言解釋器用于同步線程的工具,使得任何時(shí)刻僅有一個(gè)線程在執(zhí)行,Python的線程是操作系統(tǒng)的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由操作系統(tǒng)調(diào)度線程的執(zhí)行。一個(gè)python解釋器進(jìn)程內(nèi)有一條主線程,以及多條用戶程序的執(zhí)行線程。即使在多核CPU平臺(tái)上,由于GIL的存在,也會(huì)禁止多線程的并行執(zhí)行。

拓展:編程語(yǔ)言分類及特點(diǎn)簡(jiǎn)介

編程語(yǔ)言主要從以下幾個(gè)角度進(jìn)行分類,編譯型和解釋型、靜態(tài)語(yǔ)言和動(dòng)態(tài)語(yǔ)言、強(qiáng)類型定義語(yǔ)言和弱類型定義語(yǔ)言。

編譯型和解釋型

CPU不能直接認(rèn)識(shí)并執(zhí)行我們寫的語(yǔ)句,它只能認(rèn)識(shí)機(jī)器語(yǔ)言(CPU指令集;二進(jìn)制的形式);因此我們開發(fā)語(yǔ)言的Virtual Machine要將識(shí)別的開發(fā)語(yǔ)言轉(zhuǎn)換成機(jī)器語(yǔ)言讓CPU去執(zhí)行;
那么就有兩種以下兩種方式:
編譯型:編譯器把源程序的每一條語(yǔ)句都編譯成機(jī)器語(yǔ)言,并保存成二進(jìn)制文件,這樣運(yùn)行時(shí)計(jì)算機(jī)可以直接以機(jī)器語(yǔ)言來(lái)運(yùn)行此程序,速度很快;
編譯型:解釋器則是只在執(zhí)行程序時(shí),才一條一條的解釋成機(jī)器語(yǔ)言給計(jì)算機(jī)來(lái)執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.

編譯型 解釋型 混合型
C Java Sscript Java
C++ Pythin C#
GO Ruby N/A
Swift PHP N/A
Ojbect-C Perl N/A
編譯和解釋型優(yōu)缺點(diǎn)

編譯型

優(yōu)點(diǎn):編譯器一般會(huì)有預(yù)編譯的過(guò)程對(duì)代碼進(jìn)行優(yōu)化。因?yàn)榫幾g只做一次,運(yùn)行時(shí)不需要編譯,所以編譯型語(yǔ)言的程序執(zhí)行效率高。可以脫離語(yǔ)言環(huán)境獨(dú)立運(yùn)行。
缺點(diǎn):編譯之后如果需要修改就需要整個(gè)模塊重新編譯。編譯的時(shí)候根據(jù)對(duì)應(yīng)的運(yùn)行環(huán)境生成機(jī)器碼,不同的操作系統(tǒng)之間移植就會(huì)有問題,需要根據(jù)運(yùn)行的操作系統(tǒng)環(huán)境編譯不同的可執(zhí)行文件。

解釋型

優(yōu)點(diǎn):有良好的平臺(tái)兼容性,在任何環(huán)境中都可以運(yùn)行,前提是安裝了解釋器(虛擬機(jī))。靈活,修改代碼的時(shí)候直接修改就可以,可以快速部署,不用停機(jī)維護(hù)。
缺點(diǎn):每次運(yùn)行的時(shí)候都要解釋一遍,性能上不如編譯型語(yǔ)言。

靜態(tài)類型語(yǔ)言:

靜態(tài)類型語(yǔ)言與動(dòng)態(tài)類型語(yǔ)言剛好相反,它的數(shù)據(jù)類型是在編譯其間檢查的,也就是說(shuō)在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型。
C/C++是靜態(tài)類型語(yǔ)言的典型代表,其他的靜態(tài)類型語(yǔ)言還有C#、JAVA等。

強(qiáng)類型和弱類型定義語(yǔ)言

強(qiáng)類型定義語(yǔ)言在速度上可能略遜色于弱類型定義語(yǔ)言,但是強(qiáng)類型定義語(yǔ)言帶來(lái)的嚴(yán)謹(jǐn)性能夠有效的避免許多錯(cuò)誤。
另外,“這門語(yǔ)言是不是動(dòng)態(tài)語(yǔ)言”與“這門語(yǔ)言是否類型安全”之間是完全沒有聯(lián)系的!
例如:
Python是動(dòng)態(tài)語(yǔ)言,是強(qiáng)類型定義語(yǔ)言(類型安全的語(yǔ)言);
VBScript是動(dòng)態(tài)語(yǔ)言,是弱類型定義語(yǔ)言(類型不安全的語(yǔ)言);
JAVA是靜態(tài)語(yǔ)言,是強(qiáng)類型定義語(yǔ)言(類型安全的語(yǔ)言)。

強(qiáng)類型定義語(yǔ)言:

是強(qiáng)制數(shù)據(jù)類型定義的語(yǔ)言。一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型,如果不經(jīng)過(guò)強(qiáng)制轉(zhuǎn)換,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型了。
舉個(gè)例子:如果你定義了一個(gè)整型變量a,那么程序根本不可能將a當(dāng)作字符串類型處理。強(qiáng)類型定義語(yǔ)言是類型安全的語(yǔ)言。

弱類型定義語(yǔ)言:

數(shù)據(jù)類型可以被忽略的語(yǔ)言。它與強(qiáng)類型定義語(yǔ)言相反, 一個(gè)變量可以賦不同數(shù)據(jù)類型的值。

.

所以:python是一門動(dòng)態(tài)解釋性的強(qiáng)類型定義語(yǔ)言。

Python解釋器

介紹:

當(dāng)我們編寫Python代碼時(shí),我們得到的是一個(gè)包含Python代碼的以.py為擴(kuò)展名的文本文件。要運(yùn)行代碼,就需要Python解釋器去執(zhí)行.py文件。
由于整個(gè)Python語(yǔ)言從規(guī)范到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來(lái)執(zhí)行Python代碼(當(dāng)然難度很大)。事實(shí)上,確實(shí)存在多種Python解釋器。

CPython

Python的官方版本,使用C語(yǔ)言實(shí)現(xiàn),使用最為廣泛,CPython實(shí)現(xiàn)會(huì)將源文件(py文件)轉(zhuǎn)換成字節(jié)碼文件(pyc文件),然后運(yùn)行在Python虛擬機(jī)上。
CPython是使用最廣的Python解釋器

IPython

IPython是基于CPython之上的一個(gè)交互式解釋器,也就是說(shuō),IPython只是在交互方式上有所增強(qiáng),但是執(zhí)行Python代碼的功能和CPython是完全一樣的。好比很多國(guó)產(chǎn)瀏覽器雖然外觀不同,但內(nèi)核其實(shí)都是調(diào)用了IE。
CPython用>>>作為提示符,而IPython用In [序號(hào)]:作為提示符。

PyPy

Python實(shí)現(xiàn)的Python,將Python的字節(jié)碼字節(jié)碼再編譯成機(jī)器碼,是另一個(gè)Python解釋器,它的目標(biāo)是執(zhí)行速度。
PyPy采用JIT技術(shù),對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯(注意不是解釋),所以可以顯著提高Python代碼的執(zhí)行速度。
絕大部分Python代碼都可以在PyPy下運(yùn)行,但是PyPy和CPython有一些是不同的,這就導(dǎo)致相同的Python代碼在兩種解釋器下執(zhí)行可能會(huì)有不同的結(jié)果。
如果代碼要放到PyPy下執(zhí)行,就需要了解PyPy和CPython的不同點(diǎn)。

Jython

Python的Java實(shí)現(xiàn),Jython會(huì)將Python代碼動(dòng)態(tài)編譯成Java字節(jié)碼,然后在JVM上運(yùn)行。

IronPython

Python的C#實(shí)現(xiàn),運(yùn)行在微軟.Net平臺(tái)上,IronPython將Python代碼編譯成C#字節(jié)碼,然后在CLR上運(yùn)行。(與Jython類似)

注意:
Python的解釋器很多,但使用最廣泛的還是CPython。

如果要和Java或.Net平臺(tái)交互,最好的辦法不是用Jython或IronPython,而是通過(guò)網(wǎng)絡(luò)調(diào)用來(lái)交互,確保各程序之間的獨(dú)立性。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI