01-Python的介紹_Python編程之路

 轉載自(特克斯博客)www.susmote.comjava

 

首先用一句業內很是出名的話來介紹Pythonpython

「人生苦短,我用Python」linux

這也是Python宣傳時常常說的一句話android

從這句話中,能夠很是清楚Python他到底優勢在哪裏,爲何要去學Pythonc++

 

python的發展歷程

 

Python是在1990年被吉多·範羅蘇姆 (Guido van Rossum)建立發明,1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。  程序員

 

Python的名字來源於python創造者看的BBC的一部劇「Monty Python’s Flying Circus」正則表達式

Python英文翻譯過來是蟒蛇的意思算法

 

Python版本的發展過程以下shell

 

Python 已經成爲最受歡迎的程序設計語言之一。2011年1月,它被TIOBE編程語言排行榜評爲2010年度語言。自從2004年之後,python的使用率呈線性增加數據庫

 

因爲Python語言的簡潔性、易讀性以及可擴展性,在國外用Python作科學計算的研究機構日益增多,一些知名大學已經採用Python來教授程序設計課程。例如卡耐基梅隆大學的編程基礎、麻省理工學院的計算機科學及編程導論就使用Python語言講授。衆多開源的科學計算軟件包都提供了Python的調用接口,例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫ITK。而Python專用的科學計算擴展庫就更多了,例如以下3個十分經典的科學計算擴展庫:NumPy、SciPy和matplotlib,它們分別爲Python提供了快速數組處理、數值運算以及繪圖功能。所以Python語言及其衆多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數據、製做圖表,甚至開發科學計算應用程序。

 

 

python的應用

 

 

Python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域。目前業內幾乎全部大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。

 

目前Python應用的主要領域

 

  • 雲計算: 雲計算最火的語言, 典型應用OpenStack

  • WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django

  • 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas

  • 系統運維: 運維人員必備語言

  • 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測

  • 圖形GUI: PyQT, WxPython,TkInter

 

 

Python在一些公司的應用

 

 

  • Reddit - 社交分享網站,最先用Lisp開發,在2005年轉爲python

  • Dropbox - 文件分享服務

  • 豆瓣網 - 圖書、唱片、電影等文化產品的資料數據庫網站

  • Django - 鼓勵快速開發的Web應用框架

  • Fabric - 用於管理成百上千臺Linux主機的程序庫

  • EVE - 網絡遊戲EVE大量使用Python進行開發

  • Blender - 以C與Python開發的開源3D繪圖軟件

  • BitTorrent - bt下載軟件客戶端

  • Ubuntu Software Center - Ubuntu 9.10版本後自帶的圖形化包管理器

  • YUM - 用於RPM兼容的Linux系統上的包管理器

  • Civilization IV - 遊戲《文明4》

  • Battlefield 2 - 遊戲《戰地2》

  • Google - 谷歌在不少項目中用python做爲網絡應用的後端,如Google Groups、Gmail、Google Maps等,Google App Engine支持python做爲開發語言

  • NASA - 美國宇航局,從1994年起把python做爲主要開發語言

  • Industrial Light & Magic - 工業光魔,喬治·盧卡斯創立的電影特效公司

  • Yahoo! Groups - 雅虎推出的羣組交流平臺

  • YouTube - 視頻分享網站,在某些功能上使用到python

  • Cinema 4D - 一套整合3D模型、動畫與繪圖的高級三維繪圖軟件,以其高速的運算和強大的渲染插件著稱

  • Autodesk Maya - 3D建模軟件,支持python做爲腳本語言

  • gedit - Linux平臺的文本編輯器

  • GIMP - Linux平臺的圖像處理軟件

  • Minecraft: Pi Edition - 遊戲《Minecraft》的樹莓派版本

  • MySQL Workbench - 可視化數據庫管理工具

  • Digg - 社交新聞分享網站

  • Mozilla - 爲支持和領導開源的Mozilla項目而設立的一個非營利組織

  • Quora - 社交問答網站

  • Path - 私密社交應用

  • Pinterest - 圖片社交分享網站

  • SlideShare - 幻燈片存儲、展現、分享的網站

  • Yelp - 美國商戶點評網站

  • Slide - 社交遊戲/應用開發公司,被谷歌收購

 

...

Python的風格

 

Python在設計上堅持了清晰劃一的風格,這使得Python成爲一門易讀、易維護,而且被大量用戶所歡迎的、用途普遍的語言。

 

設計者開發時總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就行了。這在由Tim Peters寫的Python格言(稱爲The Zen of Python)裏面表述爲:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另外一種功能相似的高級動態語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)徹底相反。

 

Python的做者有意的設計限制性很強的語法,使得很差的編程習慣(例如if語句的下一行不向右縮進)都不能經過編譯。其中很重要的一項就是Python的縮進規則。

 

一個和其餘大多數語言(如C)的區別就是,一個模塊的界限,徹底是由每行的首字符在這一行的位置來決定的(而C語言是用一對花括號{}來明確的定出模塊的邊界的,與字符的位置毫無關係)。這一點曾經引發過爭議。由於自從C這類的語言誕生後,語言的語法含義與字符的排列方式分離開來,曾經被認爲是一種程序語言的進步。不過不能否認的是,經過強制程序員們縮進(包括if,for和函數定義等全部須要使用模塊的地方),Python確實使得程序更加清晰和美觀。

Python是一門解釋器語言

編程語言主要從如下幾個角度爲進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每一個分類表明什麼意思呢,咱們一塊兒來看一下。

編譯型和解釋型

 

傳統意義上的所謂編譯與解釋,區別在於代碼是在何時被翻譯成目標CPU的指令。——雖然這種解釋從科學上說不通,但這倒是一直以來你們更承認的更約定俗成的定義。

對 C 語言或者其餘編譯型語言來講,編譯生成了目標文件,而這個目標文件是針對特定的 CPU 體系的,爲 ARM 生成的目標文件,不能被用於 MIPS 的 CPU。這段代碼在編譯過程當中就已經被翻譯成了目標 CPU 指令,因此,若是這個程序須要在另一種 CPU 上面運行,這個代碼就必須從新編譯。

對於各類非編譯型語言(例如python/java)來講,一樣也可能存在某種編譯過程,但他們編譯生成的一般是一種『平臺無關』的中間代碼,這種代碼通常不是針對特定的 CPU 平臺,他們是在運行過程當中才被翻譯成目標 CPU 指令的,於是,在 ARM CPU 上能執行,換到 MIPS 也能執行,換到 X86 也能執行,不須要從新對源代碼進行編譯。

至於爲何會有虛擬機的存在?這個答案也很簡單了,由於那些非編譯型語言生成的並非目標平臺的代碼,而是某種中間代碼。而可以運行這種中間代碼的機器並不普遍存在,因此咱們在每一個不一樣的平臺中用軟件模擬出這個假想平臺的虛擬機,這個虛擬機執行這種中間代碼,而虛擬機負責把代碼轉換成最終的目標平臺上的指令。

用兩張圖來表示就很清楚了

 

 

靜態語言和動態語言

一般咱們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。

(1)動態類型語言:動態類型語言是指在運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其餘的各類腳本語言如VBScript也多少屬於動態類型語言。

(2)靜態類型語言:靜態類型語言與動態類型語言恰好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明全部變量的數據類型,C/C++是靜態類型語言的典型表明,其餘的靜態類型語言還有C#、JAVA等。

強類型定義語言和弱類型定義語言

 

首先用一張圖來講明那些是強類型語言,那些是弱類型語言,哪些是動態語言,哪些是靜態語言

20180325104526479.jpg

強類型定義語言和弱類型定義語言


(1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,若是不通過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:若是你定義了一個整型變量a,那麼程序根本不可能將a看成字符串類型處理。強類型定義語言是類型安全的語言。


(2)弱類型定義語言:數據類型能夠被忽略的語言。它與強類型定義語言相反, 一個變量能夠賦不一樣數據類型的值。

強類型定義語言在速度上可能略遜色於弱類型定義語言,可是強類型定義語言帶來的嚴謹性可以有效的避免許多錯誤。另外,「這門語言是否是動態語言」與「這門語言是否類型安全」之間是徹底沒有聯繫的!

例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。

後續咱們講到Python的數據類型就會很清楚了

Python的優勢和缺點

 

優勢

 

  • 簡單:Python是一種表明簡單主義思想的語言。閱讀一個良好的Python程序就感受像是在讀英語同樣。它使你可以專一於解決問題而不是去搞明白語言自己。

  • 易學:Python極其容易上手,由於Python有極其簡單的說明文檔 。

  • 速度快:Python 的底層是用 C 語言寫的,不少標準庫和第三方庫也都是用 C 寫的,運行速度很是快。

  • 免費、開源:Python是FLOSS(自由/開放源碼軟件)之一。使用者能夠自由地發佈這個軟件的拷貝、閱讀它的源代碼、對它作改動、把它的一部分用於新的自由軟件中。FLOSS是基於一個團體分享知識的概念。

  • 高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。

  • 可移植性:因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工做在不一樣平臺上)。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/二、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平臺。

  • 解釋性:一個用編譯性語言好比C或C++寫的程序能夠從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程經過編譯器和不一樣的標記、選項完成。
    運行程序的時候,鏈接/轉載器軟件把你的程序從硬盤複製到內存中而且運行。而Python語言寫的程序不須要編譯成二進制代碼。你能夠直接從源代碼運行 程序。
    在計算機內部,Python解釋器把源代碼轉換成稱爲字節碼的中間形式,而後再把它翻譯成計算機使用的機器語言並運行。這使得使用Python更加簡單。也使得Python程序更加易於移植。

  • 面向對象:Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。

  • 可擴展性:若是須要一段關鍵代碼運行得更快或者但願某些算法不公開,能夠部分程序用C或C++編寫,而後在Python程序中使用它們。
    可嵌入性:能夠把Python嵌入C/C++程序,從而向程序用戶提供腳本功能。

  • 豐富的庫:Python標準庫確實很龐大。它能夠幫助處理各類工做,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統、GUI(圖形用戶界面)、Tk和其餘與系統有關的操做。這被稱做Python的「功能齊全」理念。除了標準庫之外,還有許多其餘高質量的庫,如wxPython、Twisted和Python圖像庫等等。

  • 規範的代碼:Python採用強制縮進的方式使得代碼具備較好可讀性。而Python語言寫的程序不須要編譯成二進制代碼。

 

 

缺點

 

  • 單行語句和命令行輸出問題:不少時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,能夠較爲方便的在shell下完成簡單程序,不須要如Python同樣,必須將程序寫入一個.py文件。

  • 獨特的語法:這也許不該該被稱爲侷限,可是它用縮進來區分語句關係的方式仍是給不少初學者帶來了困惑。即使是頗有經驗的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

  • 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 23,2016

  • python 3.7.0 beta -  Janurary 31,2018 

 

2018年3月,該語言做者在郵件列表上宣佈 Python 2.7將於2020年1月1日終止支持。用戶若是想要在這個日期以後繼續獲得與Python 2.7有關的支持,則須要付費給商業供應商。

相關文章
相關標籤/搜索