人生苦短,為何一定要學(xué)Python?(文末有贈(zèng)書)
人生苦短, 我用 Python ,不知道從什么時(shí)候開始,這句話開始流行。
人們可能會(huì)說, 2017 年是 Python 輝煌的一年。畢竟在這一年中,Python 的增長速度令人驚艷。
主要編程語言的增長趨勢,圖片來自 Stack Overflow
在GitHub 2017年度報(bào)告中,Python 超越 Java 成第二受歡迎語言。在 ranked.com 的排名中,Python 是 2017 年最受歡迎人工智能編程語言(第二是 C++,R 并未上榜)。
根據(jù) Stack Overflow 流量統(tǒng)計(jì),2017 年 6 月,Python 第一次成為高收入國家 Stack Overflow 訪問量最大的標(biāo)簽。
在 TIOBE 2018 年 4 月編程語言排行榜前 20 名中,Python 已躍居到第四位,前三分別為為 Java ,C、C++。
在最新的 HackerRank 2018 開發(fā)者技能調(diào)查中,根據(jù) HackerRank 的愛恨指數(shù)數(shù)據(jù),Python 基本贏得了全年齡段開發(fā)者的芳心。
隨著 Python 進(jìn)入小學(xué)課本、Python 進(jìn)入浙江省高考、計(jì)算機(jī)二級(jí)考試加入了“Python 語言程序設(shè)計(jì)”科目、國務(wù)院發(fā)布《新一代人工智能發(fā)展規(guī)劃的通知》等新聞的不斷出現(xiàn),Python 的這股火就越來越熱。
天吶擼!小學(xué)生以后不僅會(huì)打王者農(nóng)藥,還能手把手教你玩轉(zhuǎn) Python……據(jù)小編掐指一算,這恐怕會(huì)讓無數(shù)八零后、九零后家長甚是憂愁——今后如何給孩子輔導(dǎo)作業(yè)?????
那么,為什么用 Python,它能用在哪兒,能做什么呢?
利用 Python 進(jìn)行數(shù)據(jù)分析
利用 Python 爬取網(wǎng)頁數(shù)據(jù)
利用 Python 寫小游戲
用 Python 寫一個(gè)自動(dòng)搶票的腳本
Python 有什么優(yōu)點(diǎn)
Python 在約 40 年前出現(xiàn),現(xiàn)在已經(jīng)有數(shù)以千計(jì)基于這項(xiàng)技術(shù)的網(wǎng)站和軟件項(xiàng)目。Python 因其獨(dú)有的特點(diǎn)從眾多開發(fā)語言中脫穎而出,深受世界各地的開發(fā)者喜愛。
下面,我們列舉了 Python 最顯著的一面。所有這些優(yōu)點(diǎn)使它非常流行,也讓眾多跨國公司選擇了 Python 作為他們的編程語言。
簡單,我們可以說 Python 是簡約的語言,非常易于讀寫,遇到問題時(shí),程序員可以把更多的注意力放在問題本身上,而不用花費(fèi)太多精力在程序語言、語法上。
免費(fèi),Python 是免費(fèi)開源的。這意味著程序員不用花錢,就可以共享、復(fù)制和交換它。
這也幫助 Python 形成了強(qiáng)壯的社區(qū),使它更加完善,技術(shù)發(fā)展更快。專業(yè)人士可以在社區(qū)和初學(xué)者中分享他們的知識(shí)和經(jīng)驗(yàn)。那么找到你可以使用的開源庫會(huì)得到什么好處?削減一半的項(xiàng)目支出!
兼容性,Python 兼容眾多平臺(tái),所以開發(fā)者不會(huì)遇到使用其他語言時(shí)常會(huì)遇到的困擾。
面向?qū)ο?,Python 既支持面向過程,也支持面向?qū)ο缶幊獭T诿嫦蜻^程編程中,程序員可以復(fù)用代碼;在面向?qū)ο缶幊讨?,使用基于?shù)據(jù)和函數(shù)的對(duì)對(duì)象。盡管面向?qū)ο蟮某绦蛘Z言通常十分復(fù)雜,Python 卻設(shè)法保持簡潔。
庫,Python 社區(qū)創(chuàng)造了一大堆各種各樣的 Python 庫。在他們的幫助下,你可以管理文檔,執(zhí)行單元測試、數(shù)據(jù)庫、Web 瀏覽器、電子郵件、密碼學(xué)、圖形用戶界面和更多的東西。所有東西包括在標(biāo)準(zhǔn)庫,然而,除了它,還有很多其他的庫。
Python 語言的用途
多年來,Python 在各種流行編程語言中一直排名靠前。它幾乎可以適用任何開發(fā),它旨在提高程序員的開發(fā)效率而不在于他們編的代碼。
Python 適用于網(wǎng)站、桌面應(yīng)用開發(fā),自動(dòng)化腳本,復(fù)雜計(jì)算系統(tǒng),科學(xué)計(jì)算,生命支持管理系統(tǒng),物聯(lián)網(wǎng),游戲,機(jī)器人,自然語言處理等很多方面。
而且,既使對(duì)于那些從沒有開發(fā)經(jīng)驗(yàn)的人來講,Python 的代碼也是簡潔易懂的。
由于 Python 程序代碼簡單,所以與其他程序語言相比,后期的程序維護(hù)更容易,更舒心。從商業(yè)角度來看,需要的成本降低,程序員的效率提高。
誰使用 Python
Python 開發(fā)人員社區(qū)不斷壯大,支持庫持續(xù)增多,使 Python 成為世界上功能最豐富的編程語言之一,可以適用于任何項(xiàng)目開發(fā)。
但我們?nèi)砸赋?,Python 在科學(xué)領(lǐng)域非常流行,特別是在數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)等方面。
為了全面理解 Python 相對(duì)于其他語言的優(yōu)勢,我們將把 Python 和最流行的 Web 技術(shù)做下比較,先從 PHP 開始。
Python 和 PHP
從開發(fā)的角度來看,PHP 是面向 Web 的語言。PHP 應(yīng)用程序更像是一組單獨(dú)的腳本,甚至只是一個(gè)單獨(dú)入口。
而 Python 是多用途語言,也可以用于 Web 開發(fā),基于 Python 的 Web 應(yīng)用是加載到內(nèi)存的完整應(yīng)用,有自己的內(nèi)容聲明,保存所有的查詢和請(qǐng)求。
選擇 Python 還是 PHP 進(jìn)行 Web 應(yīng)用開發(fā)需要注意以下幾點(diǎn),下面是 Python 和 PHP Web 開發(fā)的比較。
通用性
當(dāng)今時(shí)代,趨勢和流行非常重要,一些客戶和產(chǎn)品負(fù)責(zé)人只想使用最流行最熱門的技術(shù)來開發(fā)他們的項(xiàng)目,造成了技術(shù)精湛的開發(fā)人員卻完全沒有客戶和工作的情況出現(xiàn)。
所以在開始學(xué)習(xí)任何東西前,要確保你要學(xué)的技術(shù)在未來 1、5 或 10 年內(nèi)仍保持流行,不會(huì)被遺忘。
不過,你大可不必?fù)?dān)心,因?yàn)?PHP 和 Python 都屬于世界上最流行的編程語言。
PHP 用于構(gòu)建 Wikipedia,Yahoo,WordPress,F(xiàn)riendster,MailChimp,F(xiàn)lickr 等許多“巨頭”。
但不要以為 Python 沒什么用,它也用來構(gòu)建了 YouTube,Instagram,桌面版的Dropbox,Reddit,Bitbucket,Quora,Spotify,Pinterest,F(xiàn)acebook 的內(nèi)部服務(wù),以及 PayPal 系統(tǒng)的一部分。
框架
當(dāng)你選擇一項(xiàng)技術(shù)的時(shí)候,工具的多樣性也是極其重要的,它會(huì)使你的工作簡單、方便。如果一個(gè)技術(shù)為不同的任務(wù)提供了多種工具,程序員就不必每件事都要從頭開始了。
PHP 最流行的框架是 Laravel,Symfony,CodeIgniter,Yii 1 and 2,Phalcon 和其他一些。
這些工具能幫你創(chuàng)建功能強(qiáng)大而整潔的應(yīng)用程序,而 Python 卻沒有這么多引以為豪的框架,最好用的是 Django 和 Flask,但是,我們可以向你保證,隨著 Python 社區(qū)的成長,這種情況會(huì)很快改變。
學(xué)習(xí)
這通常是學(xué)生第一個(gè)想要知道的問題,學(xué)習(xí)教育的過程越容易,意味著開始工作和賺錢越快。
Python 當(dāng)然是這類的贏家,它的語法容易,簡單易學(xué),而 PHP 卻不是這樣。掌握 PHP 需要花費(fèi)很多的時(shí)間和努力。
Python 允許你犯些小錯(cuò)但不會(huì)破壞代碼,給新手一些信心繼續(xù)學(xué)習(xí)。從新手的角度來看,想學(xué)一些更容易、更靈活的技術(shù),而 Python 正是這樣的技術(shù)。
你可以用 Python 創(chuàng)建安全的應(yīng)用程序,但使用PHP卻需要額外的工具。不過不要忘記,PHP 是專門用于 Web 開發(fā)的,也的確用在這方面較多。
Java 和 Python 哪個(gè)更好?一些開發(fā)人員聲稱 Python 比 Java 更有效率。但這應(yīng)該先弄清 Python 和 Java 之間的區(qū)別是什么。
Java 和 Python 的區(qū)別
Java 是一種嚴(yán)格的類型語言,這意味著必須顯式聲明變量名。相比之下,動(dòng)態(tài)類型的 Python 則不需要聲明變量。
在編程語言上有許多關(guān)于動(dòng)態(tài)和靜態(tài)類型的爭論,但有一點(diǎn)應(yīng)該注意:Python 是一種語法簡單的功能強(qiáng)大的語言,能夠通過編寫腳本就提供優(yōu)秀的解決方案,并能夠快捷地部署在各個(gè)領(lǐng)域。
Java 可以創(chuàng)建跨平臺(tái)的應(yīng)用程序,而 Python 幾乎兼容當(dāng)前所有操作系統(tǒng)。對(duì)新手來講,Python 比 Java 更容易上手,而且代碼易讀性強(qiáng),但是如果你想你的代碼可以在任何地方都能執(zhí)行的話,那么還是選擇 Java 吧。
不過 Java 的可移植性也是有代價(jià)的,使用 Java 你需要購買更大的機(jī)器,消耗更多的內(nèi)存,并且程序更加難以開發(fā)。
Java 比 Python 更復(fù)雜,沒有技術(shù)背景的人學(xué)起來并非易事。
Python 和 C#
現(xiàn)在再來看下 C#。它們的技術(shù)差異很大,但都適用于 Web 開發(fā)。
Python 和 C# 的區(qū)別
簡而言之,Python 原本就被設(shè)計(jì)的類似用英語表達(dá)一樣,只要你使用合適的變量名稱,許多表達(dá)式就很容易讀懂。
另外,由于 Python 語法簡單,沒有像句法括號(hào)和大量的修飾詞,各種類 C 的構(gòu)造和不同的初始化變量,所以 Python 寫的代碼易讀易學(xué)。
同時(shí),C# 從 C++ 和 Java 遺傳了很多原始表達(dá)的類 C 語法,更重要的是,C# 語法使我們必須遵循一定的規(guī)則來編寫自已的方法或是繼承類,伴隨而來的是另一大串修飾詞,還有一點(diǎn)不能忘記的是要把代碼段放在括號(hào)內(nèi)。
而 Python 只用 Shift+S 鍵就可以讓代碼看上去很整潔。至于編寫腳本方面,值得一提的是 Python 的腳本是真正的腳本,能夠被解釋器執(zhí)行。
你可以用任何編輯器打開它,修改后就可以立即運(yùn)行。這在手邊沒有 IDE 或編譯器的時(shí)候優(yōu)勢十分明顯。而且使用 Python 更容易編寫跨平臺(tái)的腳本,甚至都不需要重新編譯。
但是,我們要指出 Python 的一個(gè)不足,就是需要在機(jī)器上安裝腳本解釋器,至少要在一個(gè)包或可執(zhí)行文件里打包上一個(gè)解釋器。
從而使腳本的大小從幾 KB 增加到十幾 M,不過對(duì)于現(xiàn)代計(jì)算機(jī)來說,十幾兆的空間需求基本可以忽略不計(jì),所以這也不是什么大問題。
而 C# 需要 IDE 來編寫程序,C# 的一個(gè)好處是,當(dāng)你編寫基于 Windows 平臺(tái)的腳本時(shí),它有強(qiáng)大的各類 Windows 系統(tǒng)組件支持。
例如,注冊表、WMI、網(wǎng)絡(luò)等內(nèi)置工具。C# 可以使用 WINFORMS,你需要的時(shí)候可以很容易地創(chuàng)建圖形化接口。
沒法說 Python 和 C# 哪個(gè)更好,Python 比 C# 更容易學(xué),開源庫更多,但 C# 的標(biāo)準(zhǔn)庫比 Python 的更好,其性能更高。
Python 和 Ruby
就第一語言而言,Ruby 和 Python 是最受歡迎的。Ruby 是非常流行的構(gòu)建網(wǎng)站技術(shù),其中最著名的是 Twitter(早期版本),Basecamp,Github,Airbnb,Slideshare,Groupon。
Python 和 Ruby 的區(qū)別
Ruby 和 Python 都是面向?qū)ο蟮恼Z言,都是動(dòng)態(tài)和靈活的。這些技術(shù)的主要區(qū)別在于他們解決問題的方式。Ruby 提供了不同的方法而 Python 通常只有一個(gè)。這個(gè)事實(shí)既是優(yōu)勢也是劣勢。
最流行的 Ruby 框架是 Ruby on rails。它和 Django 非常類似,因?yàn)檫@兩個(gè)框架都是為了解決相同的任務(wù)。
如果我們比較這些技術(shù)的社區(qū),我們會(huì)發(fā)現(xiàn)他們幾乎是一樣的,然而形成這些團(tuán)體的人是不同的。
Python 在數(shù)據(jù)科學(xué)和數(shù)學(xué)方面很受歡迎,所以在這里你可以找到很多的學(xué)者和教授。
記住,當(dāng)你開發(fā) Web 應(yīng)用程序時(shí),可以用 RoR 實(shí)現(xiàn),也可以用 Django,兩者都是快速高效的。如果開發(fā)偏重于大量計(jì)算和數(shù)據(jù)處理的應(yīng)用,應(yīng)該選擇 Python。
任何技術(shù)成功的秘密在于圍繞它所構(gòu)建的社區(qū),不同人群協(xié)同工作來確定其未來的發(fā)展演變,Python 的支持者是世界上規(guī)模最大和構(gòu)成最多樣化的一個(gè)團(tuán)隊(duì),不僅有數(shù)以千計(jì)的個(gè)人開發(fā)者。
而且還有諸如谷歌,Yandex,Dropbox,Mozilla,微軟(在 Visual Studio 中使用),英特爾等許多巨頭公司,他們和其他許多公司一起,已經(jīng)用 Python 創(chuàng)建了世界上最大的和最受歡迎的項(xiàng)目。
我國人工智能的飛速發(fā)展,無疑讓 Python 成為 AI 時(shí)代下的新寵兒,作為最接近人工智能語言的 Python 越來越受到國家和社會(huì)的重視。
Python 現(xiàn)如今已經(jīng)逐步在網(wǎng)絡(luò)爬蟲、數(shù)據(jù)分析、AI、機(jī)器學(xué)習(xí)、Web 開發(fā)、金融、運(yùn)維、測試等多個(gè)領(lǐng)域扎根壯大。
隨著它的被認(rèn)可程度逐漸提高,學(xué)習(xí)并掌握這門語言的人群比例越來越大,無數(shù)公司也將為搶占該領(lǐng)域高精尖人才做著殊死搏斗!
可以說,未來誰擁有人工智能領(lǐng)域的技術(shù)權(quán)威,誰將會(huì)擁有新時(shí)代互聯(lián)網(wǎng)最高話語權(quán)。
另一方面,Python 方向崗位的招聘人數(shù)需求以及薪資均在水漲船高。下面看一組 2018 年最新的薪酬數(shù)據(jù):
盡管大家會(huì)調(diào)侃,又騙我學(xué) XX,但是,學(xué)好 Python,必將讓你在編程生涯中大刀闊斧,勇闖天涯!
所以如果你對(duì)自己的專業(yè)/工作不滿意,現(xiàn)在正是進(jìn)入人工智能領(lǐng)域?qū)W習(xí)就業(yè)/轉(zhuǎn)業(yè)的最佳時(shí)機(jī)。那如何系統(tǒng)學(xué)習(xí) Python 呢?一般我們會(huì)經(jīng)歷以下幾個(gè)階段。
如何系統(tǒng)學(xué)習(xí) Python
了解 Python 編程基礎(chǔ)
一是變量、編程規(guī)范、基礎(chǔ)語法等,這也是能夠上手編寫 Python 代碼的前提。
二是數(shù)據(jù)結(jié)構(gòu),字符串、列表、字典、元組這些需要非常熟練,數(shù)據(jù)類型將貫穿你整個(gè)編程的始終。
這個(gè)部分一些簡單的練習(xí)就是,自己構(gòu)造一個(gè)數(shù)據(jù)類型,然后去實(shí)現(xiàn)基本的用法。
比如你自己構(gòu)造一個(gè)列表,實(shí)現(xiàn)列表中數(shù)據(jù)的訪問、更新、刪除等基本操作,比如 len()、max()、min() 函數(shù),以及 append()、count()、extend() 等方法。
函數(shù)和方法是實(shí)現(xiàn)數(shù)據(jù)增刪改查的基本途徑,如果你在實(shí)際操作中遇到數(shù)據(jù)操作的問題,可以在具體的數(shù)據(jù)類型下查找相關(guān)用法。
Python 函數(shù)及流程控制
學(xué)習(xí) Python 的函數(shù)和控制語句,是真正去解決問題的過程。如何實(shí)現(xiàn)判斷和循壞,如何將固定的功能模塊封裝成函數(shù),這些不僅是寫出代碼的必要條件,也是訓(xùn)練編程思維的必經(jīng)之路。
函數(shù)這個(gè)部分無外乎函數(shù)的定義、函數(shù)調(diào)用以及參數(shù)傳遞,但是要能夠嫻熟地寫出函數(shù)實(shí)現(xiàn)對(duì)應(yīng)的功能,需要注意的細(xì)節(jié)很多,也需要不斷地訓(xùn)練。
流程控制則相對(duì)要好掌握一些,條件語句和循壞語句在不同的場景下練習(xí)幾遍,知道判斷和循環(huán)實(shí)現(xiàn)的過程,基本上就沒問題了。
其實(shí)到這個(gè)地方,基本的 Python 知識(shí)你已經(jīng)掌握了,你可以自己去做一些小項(xiàng)目,比如猜數(shù)字、各種轉(zhuǎn)換器、記賬工具……
利用 Python 做些事情
通常在學(xué)習(xí)一段時(shí)間之后,你就會(huì)有自我懷疑的過程,貌似真的懂了,但是離做出實(shí)際的東西又很遠(yuǎn),這些東西是否有用?
這個(gè)時(shí)候不妨了解一些第三方庫,你可以做更多的事情。比如用 pandas 作數(shù)據(jù)處理,用 Matplotlib 做數(shù)據(jù)可視化分析,用 BeautifulSoup 寫爬蟲,利用 Flask 搭建網(wǎng)站……
這些別人搭好的輪子,你直接拿來用就可以了。當(dāng)然像寫爬蟲和網(wǎng)站,你還需要了解其他方面的一些知識(shí)(比如 HTTP、HTML、JS、數(shù)據(jù)庫等)。
對(duì)于不同的庫,內(nèi)部的方法、函數(shù)你還需要去熟悉,開始的時(shí)候先掌握少部分最常用的方法,在遇到實(shí)際的問題的時(shí)候,再去查對(duì)應(yīng)的更多的用法,這樣會(huì)更高效。
深入 Python 編程
其實(shí)第三個(gè)階段反復(fù)練習(xí)實(shí)踐,你已經(jīng)基本具備一些工作的技能了,比如 Python 數(shù)據(jù)分析、網(wǎng)絡(luò)爬蟲、寫工具腳本……
首先你要了解 Python 的高級(jí)特性,如迭代器、生成器、裝飾器等,了解類和面向?qū)ο蟮睦砟睢?/p>
深入下去,你可以去探索 Python 的實(shí)現(xiàn)原理,Python 的性能優(yōu)化,跳出 Python 語言本身,去了解計(jì)算機(jī)的交互原理,還有很長的路要走,但并不是每一個(gè)人都需要這個(gè)過程。
但這些高屋建瓴的東西,又是你在這個(gè)領(lǐng)域立足生根的重要條件,對(duì)于堅(jiān)定走技術(shù)方向的人來說,這個(gè)過程是有必要的。這個(gè)時(shí)候你再去做應(yīng)用層面的一些東西,又會(huì)有更加深刻的理解。
總結(jié)下來,學(xué)習(xí) Python,最常見的坑有這些:
- 很難找到合適且優(yōu)質(zhì)的學(xué)習(xí)資源,難以下手,或者隨便找一些材料開始學(xué)習(xí),極其容易從入門到放棄。
- 遇到問題不知道如何尋找解決辦法,甚至連問題都描述不清楚,經(jīng)常被一些細(xì)小的問題卡住,學(xué)習(xí)效率不高。
- 在理論學(xué)習(xí)中無法自拔,學(xué)習(xí)很久之后,發(fā)現(xiàn)還是不知道如何在實(shí)際的項(xiàng)目中去應(yīng)用,缺乏解決問題的能力。
- 看到別人的案例覺得好像是那么回事,但是自己去寫代碼的時(shí)候依然很困難,無法訓(xùn)練編程思維。
福利來啦
身為程序員的您對(duì)學(xué)習(xí) Python 有哪些好的建議?掃描下方二維碼,關(guān)注51CTO技術(shù)棧公眾號(hào)。歡迎在技術(shù)棧微信公眾號(hào)留言探討,小編將選出留言最精彩的 10 名網(wǎng)友,送出《Python數(shù)據(jù)分析從入門到精通》圖書一本~活動(dòng)截止時(shí)間 4 月 20 日十二時(shí)整,特別鳴謝電子工業(yè)出版社為本次活動(dòng)提供的圖書贊助。
內(nèi)容簡介
如果你已經(jīng)決定學(xué)習(xí) Python 數(shù)據(jù)分析,但是之前沒有編程經(jīng)驗(yàn),那《Python數(shù)據(jù)分析從入門到精通》你絕不能錯(cuò)過。Python 數(shù)據(jù)分析“四劍客”在本書上會(huì)進(jìn)行詳細(xì)深入的介紹。
本書詳細(xì)地介紹了 IPython、Numpy、pandas、Matplotlib 庫的組成與使用,為科學(xué)計(jì)算相關(guān)人員提供了有用的參考資料。采取循序漸進(jìn)的寫作風(fēng)格,對(duì)于工具的安裝、使用步驟、方法技巧逐步展開,加以圖解和應(yīng)用場景,即使完全不懂 Python 和數(shù)據(jù)分析的人員,也可以流暢地讀完本書。