業(yè)余學(xué)python有用嗎?
為什么這么多人在學(xué)Python呢?很多小白都聽(tīng)說(shuō)Python很火,簡(jiǎn)單易學(xué),學(xué)起來(lái)很容易,學(xué)習(xí)周期短,可是為啥要學(xué)Python呢?,下面談?wù)勎覍?duì)Python的感悟。
在PC時(shí)代大量的嵌入式的設(shè)備,底層的代碼,底層原理,以及底層邏輯運(yùn)用,以及桌面的應(yīng)用都是用C、C++實(shí)現(xiàn)的,毋庸置疑它們是最接近底層,對(duì)底層有著強(qiáng)大的解釋說(shuō)服力,也是最早的、最快的。隨著2000年電商的大規(guī)模的興起,多數(shù)人融入到這個(gè)大家庭中,逐漸地從PC時(shí)代過(guò)度到互聯(lián)網(wǎng)時(shí)代,Java開(kāi)始王者歸來(lái),再加上2010移動(dòng)互聯(lián)網(wǎng)的爆發(fā)Android開(kāi)始風(fēng)靡起來(lái),Java更是如日中天,走向了輝煌。那我們現(xiàn)在為什么要學(xué)習(xí)Python呢?Python到底是用來(lái)干什么的?1、Web開(kāi)發(fā)Python的誕生歷史比Web還要早,由于Python是一種解釋型的腳本語(yǔ)言,開(kāi)發(fā)效率高,所以非常適合用來(lái)做Web開(kāi)發(fā),大大提高了做web開(kāi)發(fā)人員的效率。Python有上百種Web開(kāi)發(fā)框架,有很多成熟的模板技術(shù),選擇Python開(kāi)發(fā)Web應(yīng)用,不但開(kāi)發(fā)效率高,而且運(yùn)行速度快,加快了時(shí)代的發(fā)展。常用的web開(kāi)發(fā)框架有:Django、Flask、Tornado 等。許多知名的互聯(lián)網(wǎng)企業(yè)或者小型公司將Python作為主要開(kāi)發(fā)語(yǔ)言:豆瓣、知乎、果殼網(wǎng)、Google、NASA、YouTube、Facebook……由于后臺(tái)服務(wù)器的通用性,除了狹義的網(wǎng)站之外,很多App和游戲的服務(wù)器端也同樣用 Python實(shí)現(xiàn),來(lái)運(yùn)行,完成相應(yīng)的工作。一個(gè)Web應(yīng)用的本質(zhì)就是:瀏覽器發(fā)送一個(gè)HTTP請(qǐng)求;服務(wù)器收到請(qǐng)求,生成一個(gè)HTML文檔;服務(wù)器把HTML文檔作為HTTP響應(yīng)的Body發(fā)送給瀏覽器;瀏覽器收到HTTP響應(yīng),從HTTP Body取出HTML文檔并顯示。所以,最簡(jiǎn)單的Web應(yīng)用就是先把HTML用文件保存好,用一個(gè)現(xiàn)成的HTTP服務(wù)器軟件,接收用戶請(qǐng)求,從文件中讀取HTML,返回。Apache、Nginx、Lighttpd等這些常見(jiàn)的靜態(tài)服務(wù)器就是干這件事情的,完成這些事情的。如果要?jiǎng)討B(tài)生成HTML,就需要把上述步驟自己來(lái)實(shí)現(xiàn)。不過(guò),接受HTTP請(qǐng)求、解析HTTP請(qǐng)求、發(fā)送HTTP響應(yīng)都是苦力活,如果我們自己來(lái)寫這些底層代碼,還沒(méi)開(kāi)始寫動(dòng)態(tài)HTML呢,就得花個(gè)把月去讀HTTP規(guī)范。正確的做法是底層代碼由專門的服務(wù)器軟件實(shí)現(xiàn),我們用Python專注于生成HTML文檔。因?yàn)槲覀儾幌M佑|到TCP連接、HTTP原始請(qǐng)求和響應(yīng)格式,所以,需要一個(gè)統(tǒng)一的接口,讓我們專心用Python編寫Web業(yè)務(wù)。這個(gè)接口就是WSGI:Web Server Gateway Interface。(Web服務(wù)器網(wǎng)關(guān)接口)wsgi就是一種規(guī)范,它定義了使用web應(yīng)用程序與Python編寫的web服務(wù)器程序之間的接口格式。無(wú)論多么復(fù)雜的Web應(yīng)用程序,入口都是一個(gè)WSGI處理函數(shù)。HTTP請(qǐng)求的所有輸入信息都可以通過(guò)environ獲得,HTTP響應(yīng)的輸出都可以通過(guò)start_response()加上函數(shù)返回值作為Body。WSGI接口定義非常簡(jiǎn)單,它只要求Web開(kāi)發(fā)者實(shí)現(xiàn)一個(gè)函數(shù),就可以響應(yīng)HTTP請(qǐng)求。我們來(lái)看一個(gè)最簡(jiǎn)單的Web版本的“Hello,web!”:上面的application()函數(shù)就是符合WSGI標(biāo)準(zhǔn)的一個(gè)HTTP處理函數(shù),它接收兩個(gè)參數(shù):environ:一個(gè)包含所有HTTP請(qǐng)求信息的dict對(duì)象;start_response:一個(gè)發(fā)送HTTP響應(yīng)的函數(shù)。在application()函數(shù)中,調(diào)用:就發(fā)送了HTTP響應(yīng)的Header,注意Header只能發(fā)送一次,也就是只能調(diào)用一次start_response()函數(shù)。start_response()函數(shù)接收兩個(gè)參數(shù),一個(gè)是HTTP響應(yīng)碼,一個(gè)是一組list表示的HTTP Header,每個(gè)Header用一個(gè)包含兩個(gè)str的tuple表示。通常情況下,都應(yīng)該把Content-Type頭發(fā)送給瀏覽器。其他很多常用的HTTP Header也應(yīng)該發(fā)送。然后,函數(shù)的返回值'<h1>Hello, web!</h1>'將作為HTTP響應(yīng)的Body發(fā)送給瀏覽器。有了WSGI,我們關(guān)心的就是如何從environ這個(gè)dict對(duì)象拿到HTTP請(qǐng)求信息,然后構(gòu)造HTML,通過(guò)start_response()發(fā)送Header,最后返回Body。了解了WSGI框架,我們發(fā)現(xiàn):其實(shí)一個(gè)Web App,就是寫一個(gè)WSGI的處理函數(shù),針對(duì)每個(gè)HTTP請(qǐng)求進(jìn)行響應(yīng)。但是如何處理HTTP請(qǐng)求不是問(wèn)題,問(wèn)題是如何處理100個(gè)不同的URL。由于用Python開(kāi)發(fā)一個(gè)Web框架十分容易,所以Python有上百個(gè)開(kāi)源的Web框架。各種Web框架的優(yōu)缺點(diǎn)自己去了解一下就可以了,直接選擇一個(gè)比較流行的Web框架——Flask來(lái)使用。除了Flask,常見(jiàn)的Python Web框架還有:Django:全能型Web框架;web.py:一個(gè)小巧的Web框架;Bottle:和Flask類似的Web框架;Tornado:Facebook的開(kāi)源異步Web框架。做一個(gè)游戲2、網(wǎng)絡(luò)爬蟲許多人對(duì)編程的熱情始于好奇,終于停滯,小有成就就止步于此。距離真槍實(shí)干做開(kāi)發(fā)有技術(shù)差距,也無(wú)人指點(diǎn)提帶,也不知當(dāng)下水平能干嘛?就在這樣的疑惑循環(huán)中,編程技能止步不前,而爬蟲是最好的進(jìn)階方向之一。網(wǎng)絡(luò)爬蟲是Python比較常用的一個(gè)場(chǎng)景,國(guó)際上,google在早期大量地使用Python語(yǔ)言作為網(wǎng)絡(luò)爬蟲的基礎(chǔ),帶動(dòng)了整個(gè)Python語(yǔ)言的應(yīng)用發(fā)展。以前國(guó)內(nèi)很多人用采集器搜刮網(wǎng)上的內(nèi)容,現(xiàn)在用Python收集網(wǎng)上的信息比以前容易很多了,如:從各大網(wǎng)站爬取商品折扣信息,比較獲取最優(yōu)選擇;對(duì)社交網(wǎng)絡(luò)上發(fā)言進(jìn)行收集分類,生成情緒地圖,分析語(yǔ)言習(xí)慣;爬取網(wǎng)易云音樂(lè)某一類歌曲的所有評(píng)論,生成詞云;按條件篩選獲得豆瓣的電影書籍信息并生成表格……應(yīng)用實(shí)在太多,幾乎每個(gè)人學(xué)習(xí)爬蟲之后都能夠通過(guò)爬蟲去做一些好玩有趣有用的事。例子:爬取網(wǎng)絡(luò)上的歌曲3、人工智能人工智能是現(xiàn)在非常火的一個(gè)方向,AI熱潮讓Python語(yǔ)言的未來(lái)充滿了無(wú)限的潛力。現(xiàn)在釋放出來(lái)的幾個(gè)非常有影響力的AI框架,大多是Python的實(shí)現(xiàn),為什么呢?因?yàn)镻ython有很多庫(kù)很方便做人工智能,比如numpy, scipy做數(shù)值計(jì)算的,sklearn做機(jī)器學(xué)習(xí)的,pybrain做神經(jīng)網(wǎng)絡(luò)的,matplotlib將數(shù)據(jù)可視化的。在人工智能大范疇領(lǐng)域內(nèi)的數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)等方面都是主流的編程語(yǔ)言,得到廣泛的支持和應(yīng)用。人工智能的核心算法大部分還是依賴于C/C++的,因?yàn)槭怯?jì)算密集型,需要非常精細(xì)的優(yōu)化,還需要GPU、專用硬件之類的接口,這些都只有C/C++能做到,所有c/c++和P相結(jié)合就可以實(shí)現(xiàn)人工智能。4、Python的其他應(yīng)用舉例系統(tǒng)編程:提供API,能方便進(jìn)行系統(tǒng)維護(hù)和管理,Linux下標(biāo)志性語(yǔ)言之一,是很多系統(tǒng)管理員理想的編程工具。圖形處理:有PIL、Tkinter等圖形庫(kù)支持,能方便進(jìn)行圖形處理。數(shù)學(xué)處理:NumPy擴(kuò)展提供大量與許多標(biāo)準(zhǔn)數(shù)學(xué)庫(kù)的接口。文本處理:Python提供的re模塊能支持正則表達(dá)式,還提供SGML,XML分析模塊,許多程序員利用Python進(jìn)行XML程序的開(kāi)發(fā)。數(shù)據(jù)庫(kù)編程:程序員可通過(guò)遵循PythonDB-API(數(shù)據(jù)庫(kù)應(yīng)用程序編程接口)規(guī)范的模塊與MicrosoftSQLServer,Oracle,Sybase,DB2,MySQL、SQLite等數(shù)據(jù)庫(kù)通信。Python自帶有一個(gè)Gadfly模塊,提供了一個(gè)完整的SQL環(huán)境。網(wǎng)絡(luò)編程:提供豐富的模塊支持sockets編程,能方便快速地開(kāi)發(fā)分布式應(yīng)用程序。很多大規(guī)模軟件開(kāi)發(fā)計(jì)劃例如Zope,Mnet及BitTorrent.Google都在廣泛地使用它。Web編程:應(yīng)用的開(kāi)發(fā)語(yǔ)言,支持最新的XML技術(shù)。多媒體應(yīng)用:Python的PyOpenGL模塊封裝了“OpenGL應(yīng)用程序編程接口”,能進(jìn)行二維和三維圖像處理。PyGame模塊可用于編寫游戲軟件。黑客編程: Python有一個(gè)hack的庫(kù),內(nèi)置了你熟悉的或不熟悉的函數(shù),但是缺少成就感。以上內(nèi)容分享自華為云社區(qū)《【云駐共創(chuàng)】你知道在未來(lái)Python主要的運(yùn)用途徑和領(lǐng)域嗎?》,作者:楠羽。