2015年8月20日 星期四

Python 簡介:語言特性與應用範圍

 

常言道:珍惜生命,請使用Python。

python是非常強大的程式語言,又廣又深的的第三方函式庫,簡潔而友好的語法,特別容易上手,我本身的母語是C/C++,使用python這種高階語言真的有種作弊的感覺,不用自己造輪子實在是很開心XD




Python 語言特性

python強項在於語句少而簡潔,幫助開發者專注問題。而且各種package齊備。但是python有個巨大的缺點,仍然是慢。



Python是完全物件導向的語言
Python的函式、模組、數字、字串都是物件。並且完全支援繼承、重載、衍生、多重繼承,有益於增強原始碼的複用性。Python支援重載運算符,因此Python也支援泛型設計。


Python支援函數式語言設計
相對於Lisp這種傳統的函數式程式語言,Python對函數式設計只提供了有限的支援。有兩個標準庫(functools, itertools)提供了與Haskell和Standard ML中類似的函數式程式設計工具。


Python是高階動態程式語言
雖然Python可能被粗略地分類為「腳本語言」(script language),但實際上一些大規模軟體開發計畫例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。Python的支持者較喜歡稱它為一種高階動態程式語言,原因是「腳本語言」泛指僅作簡單程式設計任務的語言,如shell script、VBScript等只能處理簡單任務的程式語言,並不能與Python相提並論。


Python具有海量第3方程式庫
Python本身被設計為可擴充的。並非所有的特性和功能都整合到語言核心。Python提供了豐富的API和工具,以便程式設計師能夠輕鬆地使用C、C++、Cython來編寫擴充模組。Python編譯器本身也可以被整合到其它需要腳本語言的程式內。因此,有很多人把Python作為一種「膠水語言」(glue language)使用。使用Python將其他語言編寫的程式進行整合和封裝。

在Google內部的很多專案,例如Google App Engine使用C++編寫效能要求極高的部分,然後用Python或Java/Go調用相應的模組。《Python技術手冊》的作者馬特利(Alex Martelli)說:「這很難講,不過,2004年,Python已在Google內部使用,Google召募許多Python高手,但在這之前就已決定使用Python。他們的目的是儘量使用Python,在不得已時改用C++;在操控硬體的場合使用C++,在快速開發時候使用Python。」

YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。OLPC的作業系統Sugar項目的大多數軟體都是使用Python編寫。





Python的設計哲學

Python的設計哲學是「優雅」、「明確」、「簡單」。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確沒有或者很少有歧義的語法。這些準則被稱為「Python格言」。

在Python解釋器內運行import this可以獲得完整的清單。

>>> import this
The Zen of Python
by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

--From: Python.org






Python的應用範圍

目前 Python 這個語言應用無遠弗屆,看完應用範圍會更有繼續研究下去的動力!



Web程式 - Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask
Python經常被用於Web開發。一些Web框架,如Django、Pyramid、TurboGears、Tornado、web2py、Zope、Flask等,可以讓程式設計師輕鬆地開發和管理複雜的Web程式。Python對於各種網路協定的支援很完善,因此經常被用於編寫伺服器軟體、網路蠕蟲。


作業系統 - biquity、Anaconda
在很多作業系統裡,Python是標準的系統元件。大多數Linux發行版以及NetBSD、OpenBSD和Mac OS X都整合了Python,可以在終端機下直接執行Python。


GUI開發 - Tkinter、wxPython、PyQt
Python本身包含的Tkinter庫能夠支援簡單的GUI開發。但是越來越多的Python程式設計師選擇wxPython或者PyQt等GUI套件來開發跨平台的桌面軟體。使用它們開發的桌面軟體執行速度快,與使用者的桌面環境相契合。通過PyInstaller還能將程式釋出為獨立的安裝程式包。


遊戲 
很多遊戲使用C++編寫圖形顯示等高效能模組,而使用Python或者Lua編寫遊戲的邏輯、伺服器。相較於Python,Lua的功能更簡單、體積更小;而Python則支援更多的特性和資料類型。很多遊戲,如EVE Online使用Python來處理遊戲中繁多的邏輯。


網頁爬蟲 - Scrapy
爬蟲Scrapy,簡單易用。做一個爬蟲不會是整個項目的重點,因此簡潔的架構、python簡潔的代碼、scrapy強大的工具包總是可以用最少的代價很好的完成問題。


數據挖掘/機器學習 - numpy, scipy, matplotlib
numpy, scipy, matplotlib三個是python科學計算的基礎庫。大部分其他的python機器學習庫都建立在他們的基礎上。比如主題模型Gensim,機器學習工具包scikits.learn,自然語言處理工具包NLTK。數學表達式模擬工具theano。支持向量機的libsvm。


自然語言處理 - nltk
nltk是自然語言處理極佳的工具,相比有時候還需要java的stanfordnlp,有了好的語料處理工具,nlp和ml也沒那麼大區別了。





References

It's django - 用Python迅速打造Web應用

Python - 十分鐘入門
http://tech.marsw.tw/blog/2014/09/03/getting-started-with-python-in-ten-minute

wiki - python
https://zh.wikipedia.org/wiki/Python

Python在網頁爬蟲、數據挖掘、機器學習和自然語言處理領域的應用情況如何?
http://www.aypr.net/dst-news/show-26250151457699.html






技術提供:Blogger.