python的创始人、特点应用领域_python学习笔记(python发展介绍)
一、python介紹
python的創始人為吉多?范羅蘇姆(Guido van Rossum)
目前python主要應用領域:
?云計算
?WEB開發
?科學運算、人工智能
?系統運維
?金融:量化交易,金融分析等,作為動態語言的python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛
?圖形GUI
python是一門什么樣的語言?
編程語言主要從以下幾個角度進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言。
編譯型和解釋型
編譯型,如:c,c++,其實它和匯編語言是一樣的:也是有一個負責范怡的程序來對我們的源代碼進行轉換,生產相對應的可執行代碼。這個過程說得專業一點,就成為編譯(Compile),而負責編譯的程序自然就成為編譯器(Compiler)。如果我們寫的程序代碼都包含在一個源文件中,那么通常編譯之后就會直接生成一個可執行文件,我們就可以直接運行了。對于較復雜的項目,為了方便管理,我們通常把代碼分散在各個源文件中,作為不同的模塊來組織。這時編譯各個文件時就會生成目標文件(Object file)而不是前面說的可執行文件。一般一個源文件的編譯都會對應一個目標文件。這些目標文件里的內容基本上已經是可執行代碼了,但由于只是整個項目的一部分,所以我們還不能直接運行。待所有的源文件的編譯都大功告成,我們就可以最后把這些半成品的目標文件“打包”成一個可執行文件了,這個工作由另一個程序負責完成,由于此過程好像是把包含可執行代碼的目標文件連接裝配起來,所以又稱為鏈接(Link),而負責鏈接的程序就叫鏈接程序(Linker)。鏈接程序除了鏈接目標文件外,可能還有各種資源,像圖標文件、聲音文件等,還要負責去除目標文件之間的冗余重復代碼,等等……鏈接完成之后,一般就可以得到我們想要的可執行文件了。
解釋型,從字面上看,編譯和解釋都有翻譯的意思,它們的區別則在于翻譯的時機安排不大一樣。打個比方:閱讀一本不懂的外語書,可以找一個翻譯,給他足夠時間從頭到尾把整本書翻譯好,然后把母語版書給你閱讀;或者,讓翻譯一句一句給你翻譯,如果想往回看某個章杰,他也得重新給你翻譯。
兩種方式,前者就相當于編譯型:一次把所有 代碼轉換成機器語言,然后寫成可執行文件;而后者就相當于解釋型:在程序運行的前一刻,還只有源程序而沒有可執行程序;而程序每執行到源程序的某一條指令,則會有一個稱之為解釋程序的外殼程序將源代碼轉換成二進制代碼以供執行,總言之,就是不斷地解釋、執行、解釋、執行……所以,解釋型程序是離不開解釋程序的。像早期的BASIC就是一門經典的解釋型語言,要執行BASIC程序,就得進入BASIC環境,然后才能加載程序源文件、運行。
解釋型語言注定比編譯型語言慢,某些情況下甚至會慢幾百倍。
編譯型與解釋型,兩者各有利弊。前者執行速度快,同等條件下對系統要求低,因此像開發操作系統、大型應用程序、數據庫系統等時采用。像C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可視為編譯語言,而一些網頁腳本、服務器腳本及輔助開發接口這樣的對速度要求不高、對不同系統平臺間的兼容性有一定要求的程序則通常使用解釋型語言,如JAVA、JavaScript、VBScript、Perl、Python等。
編譯型和解釋型各有優缺點又相互對立,所以一批新興的語言都有把兩者折衷起來的趨勢,例如JAVA語言雖然比較接近解釋型語言的特征,但在執行之前已經預先進行一次預編譯,生成的代碼是介于機器碼和JAVA源代碼之間的中介代碼,運行的時候則由JVM(Java的虛擬機平臺,可視為解釋器)解釋執行。它既保留了源代碼的高抽象、可移植的特點,又已經完成了對源代碼的大部分預編譯工作,所以執行起來比“純解釋型”程序要快許多。而像VB6(或以前版本)、C#這樣的語言,雖然表面上看生成的是.exe可執行程序文件,但VB6編譯之后實際生成的也是一種中介碼,只不過編譯器在前面安插了一段自動調用某個外部解釋器的代碼(該解釋程序獨立于用戶編寫的程序,存放于系統的某個DLL文件中,所有以VB6編譯生成的可執行程序都要用到它),以解釋執行實際的程序體。 C#(以及其他.net的語言編譯器)則是生成.net目標代碼,實際執行時則由.net解釋系統(就像JVM一樣,也是一個虛擬機平臺)進行執行。當然.net目標代碼已經相當“低級”,比較接近機器語言了,所以仍將其視為編譯語言,而且其可移植程度也沒有JAVA號稱的這么強大,JAVA號稱“一次編譯,到處執行”,而.net則是“一次編碼,到處編譯”。總之隨著設計技術與硬件的不斷發展,編譯型與解釋型兩種方式的界限正在不斷變得模糊。
動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。
動態類型語言:是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。python和ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬于動態類型語言。
靜態類型語言:與動態類型語言剛好相反,他的數據類型是在編譯期間檢查的,也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。
強類型定義語言和弱類型定義語言
強類型定義語言:強制數據類型定義的語言。一旦一個變量被指定了某個數據類型,如果不經過強制轉換,那么它就永遠是這個數據類型了。強類型語言是類型安全的語言。
弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反,一個變量可以賦不同數據類型的值。
強類型定義語言在速度上可能略遜色于弱類型定義語言,但是強類型定義語言帶來的嚴謹性能有效地避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是完全沒有聯系的!
例如:python是動態語言,是強類型定義語言(類型安全的語言);VBScript是動態語言,是弱類型定義語言(類型不安全的語言);JAVA是靜態語言,是強類型定義語言(類型安全的語言)。shell腳本也是弱類型
python是一門動態解釋型的強類型定義語言
python的優缺點
優點:
python的定位是“優雅”“明確”“簡單”,所以python程序看上去總是簡單易懂
開發效率非常高,python有非常強大的第三方庫
高級語言
可移植性――如果你小心地避免使用依賴于系統的特性,那么你的所有python程序無需修改就幾乎可以在市場上所有的系統平臺上運行
可擴展性――如果你需要你的一段關鍵代碼運行的更快或者希望某些算法不公開,你可以把你的部分程序用C或者C++寫,然后在你的python程序中使用它們
可嵌入性
缺點:
速度慢,大多情況下用戶是無法直接感知到的,比如C運行一個程序花了0.01秒,python是0.1秒,這樣C語言直接比python快了10倍,算是非常夸張了,但是無法直接通過肉眼感知到,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右。其實大多情況下python一句完全可以滿足對程序速度的要求
代碼不能加密,因為python是解釋型語言,它的源碼都是以明文形式存放的
線程不能利用多CPU問題,這是python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用于同步線程的工具,使得任何時刻僅有一個線程在執行,python的線程是操作系統的原生線程。在linux上為pthread,在windows上為wthread,完全由操作系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即使在多核CPU平臺上,由于GIL的存在,所以禁止多線程的并行執行。
python解釋器
當我們編寫python代碼時,我們得到的是一個包含python代碼的以.py為擴展名的文本文件。要允許代碼,就需要python解釋器去執行.py文件。
CPython:最廣泛使用的解釋器。教程中的所有代碼都在CPython下執行。
IPython:基于CPython上的一個交互式解釋器
PyPy:它的目標是執行速度。采用JIT技術,對python代碼進行動態編譯(注意不是解釋),所以可以顯著提高python代碼的執行速度。
Jython:是運行在JAVA平臺上的python解釋器
IronPython:和Jython類似,是運行在微軟.net平臺上
二、python發展史
?1989年,Guido開始寫python語言的編譯器
?1991年,第一個python編譯器誕生。
?python 2.0 - October 16,2000
?python 2.6 - October 1,2008 過渡版本
?python 2.7 - July 3,2010 過渡版本
?python 3.0 - December 3,2008
In November 2014,宣布,python 2.7版本會支持到2020年,不會有2.8版本。
三、python 2 or 3?
python 2.x是過去式,python 3.x是現在和未來的語言
所有的標準庫的更新只會在3.x版本中
Unicode的支持
程序員能感知的變化:
還有誰不支持python3?
twisted
python安裝:略。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python的创始人、特点应用领域_python学习笔记(python发展介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言 将整数写入内存指定的连续字节单元
- 下一篇: 企业数据1