1. 程式人生 > >Python學習筆記_零零一:Python基本介紹

Python學習筆記_零零一:Python基本介紹

交易 社交 數據 lips engine 探討 認識 hive 初學者

Python介紹

Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。
Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。
Python 是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似於PHP和Perl語言。
Python 是交互式語言: 這意味著,您可以在一個Python提示符,直接互動執行寫你的程序。
Python 是面向對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術。
Python 是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發,從簡單的文字處理到 WWW 瀏覽器再到遊戲。

Python 發展歷史

Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷蘭國家數學和計算機科學研究所設計出來的。
Python 本身也是由諸多其他語言發展而來的,這包括 ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unix shell 和其他的腳本語言等等。
像 Perl 語言一樣,Python 源代碼同樣遵循 GPL(GNU General Public License)協議。
現在 Python 是由一個核心開發團隊在維護,Guido van Rossum 仍然占據著至關重要的作用,指導其進展。

Python 特點

1.易於學習:Python有相對較少的關鍵字,結構簡單,和一個明確定義的語法,學習起來更加簡單。


2.易於閱讀:Python代碼定義的更清晰。
3.易於維護:Python的成功在於它的源代碼是相當容易維護的。
4.一個廣泛的標準庫:Python的最大的優勢之一是豐富的庫,跨平臺的,在UNIX,Windows和Macintosh兼容很好。
5.互動模式:互動模式的支持,您可以從終端輸入執行代碼並獲得結果的語言,互動的測試和調試代碼片斷。
6.可移植:基於其開放源代碼的特性,Python已經被移植(也就是使其工作)到許多平臺。
7.可擴展:如果你需要一段運行很快的關鍵代碼,或者是想要編寫一些不願開放的算法,你可以使用C或C++完成那部分程序,然後從你的Python程序中調用。
8.數據庫:Python提供所有主要的商業數據庫的接口。

9.GUI編程:Python支持GUI可以創建和移植到許多系統調用。
10.可嵌入: 你可以將Python嵌入到C/C++程序,讓你的程序的用戶獲得"腳本化"的能力。

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在一些公司的應用:

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

計算機語言的類型介紹

編譯和解釋的區別是什麽?

編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;

解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯後的程序運行的快的.

這是因為計算機不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進制的形式)

技術分享

編譯型vs解釋型

編譯型
優點:編譯器一般會有預編譯的過程對代碼進行優化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程序執行效率高。可以脫離語言環境獨立運行。
缺點:編譯之後如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件。

解釋型
優點:有良好的平臺兼容性,在任何環境中都可以運行,前提是安裝了解釋器(虛擬機)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。

缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。

Python是一門什麽樣的語言

編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,Python是一種解釋型的動態的強類型的計算機高級編程語言。

1. Python是一門解釋型語言?

我初學Python時,聽到的關於Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc文件的存在。如果是解釋型語言,那麽生成的*.pyc文件是什麽呢?c應該是compiled的縮寫才對啊!

為了防止其他學習Python的人也被這句話誤解,那麽我們就在文中來澄清下這個問題,並且把一些基礎概念給理清。

2. 解釋型語言和編譯型語言

計算機是不能夠識別高級語言的,所以當我們運行一個高級語言程序的時候,就需要一個“翻譯機”來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。

編譯型語言在程序執行之前,先會通過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不需要翻譯,而直接執行就可以了。最典型的例子就是C語言。

解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,通過解釋器對程序逐行作出解釋,然後直接運行,最典型的例子是Ruby。

通過以上的例子,我們可以來總結一下解釋型語言和編譯型語言的優缺點,因為編譯型語言在程序運行之前就已經對程序做出了“翻譯”,所以在運行時就少掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解釋器的優化來在對程序做出翻譯時對整個程序做出優化,從而在效率上超過編譯型語言。

此外,隨著Java等基於虛擬機的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。

用Java來舉例,Java首先是通過編譯器編譯成字節碼文件,然後在運行時通過解釋器給解釋成機器文件。所以我們說Java是一種先編譯後解釋的語言。

3. Python到底是什麽

其實Python和Java/C#一樣,也是一門基於虛擬機的語言,我們先來從表面上簡單地了解一下Python程序的運行過程吧。

當我們在命令行中輸入python hello.py時,其實是激活了Python的“解釋器”,告訴“解釋器”:你要開始工作了。可是在“解釋”之前,其實執行的第一項工作和Java一樣,是編譯。

熟悉Java的同學可以想一下我們在命令行中如何執行一個Java的程序:

javac hello.java

java hello

只是我們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也一樣,當我們執行python hello.py時,他也一樣執行了這麽一個過程,所以我們應該這樣來描述Python,Python是一門先編譯後解釋的語言。

4. 簡述Python的運行過程

在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc文件。

我們在硬盤上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。

當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。

當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,如果找到,則直接載入,否則就重復上面的過程。

所以我們應該這樣來定位PyCodeObject和pyc文件,我們說pyc文件其實是PyCodeObject的一種持久化保存方式

Python的優缺點

先看優點

Python的定位是“優雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常復雜的程序。
開發效率非常高,Python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重復造輪子。
高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
可移植性————由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麽你的所有Python程序無需修改就幾乎可以在市場上所有的系統平臺上運行
可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些算法不公開,你可以把你的部分程序用C或C++編寫,然後在你的Python程序中使用它們。
可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

再看缺點

速度慢,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裏所指的運行速度慢在大多數情況下用戶是無法直接感知到的,必須借助測試工具才能體現出來,比如你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種情況下,當然還是建議你用C去實現的。
代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源代碼必須是加密的,那你一開始就不應該用Python來去實現。
線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是操作系統的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由操作系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即使在多核CPU平臺上,由於GIL的存在,所以禁止多線程的並行執行。關於這個問題的折衷解決方法,我們在以後線程和進程章節裏再進行詳細探討。

Python的一些常用解釋器

當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py文件。

由於整個Python語言從規範到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。

CPython

當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。

CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。

IPython

IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。

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學習筆記_零零一:Python基本介紹