當前位置:
首頁 > 最新 > 如何從零開始學Python,你知道嗎?

如何從零開始學Python,你知道嗎?

萬事開頭難,學習編程似乎也不容易。對於新手來講,在眼花繚亂的資訊、教程、分享以及五花八門的資源中,首先需要的就是選對學習路線。有太多從入門到放棄的例子,就是因為沒有找到學習的主線,把時間精力都浪費在無用的知識和信息上,最後看起來好像學了很多東西,但是真正有用的也就是十分之一。

學習Python不同於其他計算機技術,並不是羅列出一堆知識點,然後逐一記住他們,也不是同樣功能的幾個方法都要掌握。很多文章或書籍都會堆砌知識點,更有人動不動就搞出個寶典或者大全什麼的長篇大論出來,相同功能也要列出幾個,給我的感覺就好像孔乙己在說回字有幾種寫法一樣。新手初看,感覺內容很豐富,學著學著就沒動力了,真真的是體驗了學海無涯。而高手卻往往對這樣拼湊羅列知識點的方式嗤之以鼻。其實,學習編程把最主要的核心學會,再掌握解決問題的正確思路,就已經算是入門了,Python更是如此。這個崇尚最好的辦法只有一個的語言,學那麼多幹嘛。遇到需要學習的新知識,運用已經掌握的方法,很快就可以學會並運用。這也是一個合格程序員應該掌握的能力。

0.1

克服編程恐懼

新手學習編程之前通常會有兩種情緒:好奇和恐懼。通常小孩子或者純小白對編程的好奇心會比較大,好奇是因為覺得編程很神奇,可以讓計算機替我們完成更多的工作;而顧慮比較多的人就會產生恐懼或者畏難心理,恐懼是因為對未知的迷茫和無序。小編推薦一個學Python的學習裙【五八八,零九零,九四二】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有很多乾貨和技術分享!比如很多人在開始學習之前會先問,我的英語不好,我的數學不好等等類似的問題。

Python可以說是最適合編程入門的語言了,少兒接觸編程,Python也是最好的選擇。既然如此,那就說明這門語言本身其實是非常簡單的。

其實,對於新手來說,可能你首先要搞明白的事情就是什麼是編程,以及明確編程技術的困難之處到底在哪?

學編程就好像學習寫文章,不同的是,文章是寫給人看的,程序是寫給計算機去看的。我們都有過學習寫文章的經歷,那是一個過程,從陌生到熟悉的過程,從笨拙到巧妙的過程。應該沒有人是剛認識字就開始寫文章的。

想想我們學習寫作文的過程,其實最開始的時候並不是一上來老師就跟你說:「來,我們現在學習寫作文。」也不是先學漢字或者拼音,其實我們首先學會的是把想法用語言表達出來。也就是說,其實我們最先會的是在腦子裡形成想法。那可能是你下意識的,也可能是你經過深思熟慮產生的想法。有了想法之後,我們最先可以通過口述表達出來,然後才逐漸開始學習拼音、漢字、詞、句子、短語、段落、文章,造句寫文章的規矩和語法以及不同類型文章的結構等等。

學好中文就可以寫出中文給懂中文的人看,而編程就是把想法變成程序給計算機看。先會說活後寫作。學習編程也是一樣,其實首先是要有想法,而不是先想到寫什麼代碼。有了想法之後,就是怎麼把想法通過程序實現出來。編程就是把想法變成代碼的過程。互聯網行業的很多創業者都有一個共同的困境,那就是「我有一個好想法,就差一個程序員了」。

至於學習編程的困難之處,那我們就要想想我們在學習除了母語之外的另一門語言的過程了。或許你會說我的英語很好,我的法語很厲害。那麼,如果這件事從寫文章變成寫詩呢?想想古詩,要合轍押韻,還有更難的,古代就廢黜的八股文!你能想像讓你用法語寫古詩、英語寫八股文嗎?感受到難度在哪了嗎?古詩跟普通白話文章的區別就在於,古詩有字數限制,有韻腳的要求。而學習一門外語並且用外語寫詩就面臨兩個問題:

1)學習一門陌生的語言;

2)按照這門語言的語法和韻腳寫詩。

那麼,編程要面臨的困難也是這兩個問題:

1)不知道或不熟悉編程語言的語法和語義;

2)不知道如何讓計算機解決問題(就好像不知道怎麼用外語寫詩一樣)。

所以說,編程的困難就在於,你要學習一門跟你的母語不一樣的語言,而且為了計算機能明白,還要學習一些特定的語法和規則;同時還要用這個語言去解決問題

明確了編程的困難,接下來就是怎樣克服困難。學習編程最好的辦法,就是動手不斷的編程,就跟你學習所有你學習過的東西一樣,踢球、下象棋、圍棋等等。想要做一個好守門員你就要熟悉球性,不斷練習各種基本動作(語法),熟悉規則(編碼規範),研究團隊策略(演算法)等等。但最好的做法就是多練習,多實戰。

最後,你需要明確編程的兩個層次:

1)找到解決問題的方法;

2)編寫出好程序。

0.2

如何寫出好程序

偉大的程序員和白痴程序員的差別,就在於能不能寫出好程序。那麼,在我們知道了編程語言(比如Python)的語法和語義後,怎樣才能寫出好程序呢?

其實,關於什麼是好程序,定義起來並不那麼容易或者清晰。跟行業內的朋友們聊天,特別是帶團隊CTO們,經常會聽到各種吐槽。你們想聽嗎?不想?那好吧,那我就說幾點,都是他們的原話,哈哈。比如:

1) 明明寫的屎粑粑一樣的代碼,還自我感覺良好;

2) 寫代碼都不過腦子,上來就敲,還吹噓自己一天寫了多少行,寫得再多,也只是造了更多的粑粑;

3) 瞎設計,有簡單的方法不用,還自以為高明;

4) 走路都沒走穩,就想著靈活;

5) 沒腦子,你提醒他,他還覺得自己個性;

6) 靈活、設計,是給小白的嗎?不是,那是給高說出招的,小白你就踏實點;

7) 高手是有牽絆,有顧慮的,因為江湖過,坑過……度的拿捏是藝術;

嗯,吐得差不多了,哈哈,作為小白也不要有太多顧慮,在罵聲中成長嘛,罵一次,長一次記性。不過,在開始的時候,做到下面兩點,那麼你的程序,在你的能力範圍內應該就是好的:

1)編寫程序前,一定要深思熟慮!

既然編程就是解決問題的過程,只要開始編程,就意味著你要從細節開始設計,要考慮如何更好地解決問題。最終的程序是以一種最便捷的方式呈現出解決問題的思路。這也就意味著,開始編程之前就要進行縝密的思考。有太多人(不只是新手),拿到項目或者要解決的問題,馬上就開始編寫程序,這種做法,經常會因為考慮不周,導致代碼混亂,甚至中途推翻重來。

所以,再開始壘代碼之前,你首先要做的,就是坐下來,認真仔細的思考一下,怎樣能更好地解決問題,找出最佳方案,再開始實施。

2)程序要有好的可讀性

在你深思熟慮的基礎上寫的代碼就是好代碼嗎?很多時候,你問一個程序員,你的程序怎麼樣?他可能會回答你,能運行。能運行可能包含兩個方面,第一個,程序能夠解決問題,並且本身沒問題。但這是好程序嗎?

其實,能運行,是最低標準,是不是好程序還要看代碼。通常程序員寫代碼都不是只給自己看的。既然是要給別人讀的,那麼,代碼的可讀性就很重要,你可以想像一篇沒有標點,沒有斷句的文章,或許你也能讀明白,但它肯定不是好文章,也沒什麼價值。

可能你會問,程序能運行不就行了嗎?誰沒事總看?那好,如果你還沒有開始工作,那麼,這個程序可能就是你自己會看,即便這樣,你自己寫了一個爛程序,勉強能用,等過段時間,可能你要修改一些功能,那你可能要做的第一件事就是先讀懂你之前寫的爛代碼,還要回想當時是怎麼想的。

另外,如果你已經開始在公司工作了,這種爛代碼,自己看起來都費勁,你能想像你分發給同事後,大家的反應嗎?相信,會被彈劾的。

所以,經過深思熟慮之後再寫出來的代碼,一定不要辜負你的好想法。否則,那不就成了思想上的巨人,行動中的矮子了嗎?

0.3為什麼選擇Python

我開始設計一種語言,使得程序員的效率更高

-Guido van Rossum(Python之父)

編程就像寫文章,那麼,眾多語言中為什麼選擇Python呢?作為一門陌生的面對計算機的語言,如果這門語言更接近你的母語,而且寫起來跟你說話的習慣比較像,那麼,學習編程看起來也就不那麼洪水猛獸了。好在Python就是這樣一門比較容易掌握的語言。當然從某種程度Python也不是最好的,最好的是中文編程,或者方言編程,哈哈。

Python被公認為是最適合編程入門的語言之一(我的看法不是之一,Python就是最適合編程入門的語言),而且是當下最流行的語言之一,早在2007年和2010年就曾兩次獲得編程語言排名的第一名,IEEE spectrum2017年發布的報告中Python再度獲得排名的第一。Python語言特點簡單概括就是:

1) Python語法簡單,容易學習和運用;

2) 面向對象編程

3) 跨平台,具有可移植性;

4) 模塊化開發,功能豐富;

5) 具有很好的擴展性;

IEEEspectrum2017年發布的報告

Python語言的語法簡潔又獨特,很短的時間內就可以寫出一些看起來或實用或很酷的程序,後面的學習中你會深有體會。

面向對象編程最大的好處就是讓程序更容易維護,增加了代碼的重複利用效率。深入理解面向編程是程序員的必修課。

跨平台的意思就是你可以在 Windows、Linux、Mac等不同的操作系統下編寫並運行Python程序。這樣,你在一個系統下編寫的程序就可以移動到別的系統下運行,這也就是移植。

Python具有非誠豐富的庫,也就是說是說,很多你想實現的功能,其實都已經有人寫了,你要做的就是直接拿過來用。

擴展性是指,Python提供了擴展介面,可以使用其他語言為Python編寫擴展功能,比如C/C++。當然,Python也可以嵌入到其他語言中去。

有這麼多的好處,Why Python?有答案了吧!

0.4

Python的發展和應用

Python本意是大蟒蛇,但其實來歷並沒有名字這麼酷。Python的創造者是Guido van Rossum。最開始的時候,Guido開發ABC語言,聖誕節閑著無聊,就想寫出一個能讓非編程專業的計算機使用者能夠使用的編程語言,所以寫了Python,至於名字的來歷,其實是因為Guido是一個英國搞笑團體的粉絲,這個被稱為搞笑界的披頭士的團體叫《Monthy Python》。

由於Guido開放源碼,以致Python不斷壯大。甚至由於人工智慧和數據挖掘等領域的大量應用,變成了網紅語言。其實,Python從發布至今經過了一系列的演變,我們來看一下主要的幾個節點:

1989年, Guido開始寫Python語言的編譯器。他希望這個新的叫做Python的語言,能符合他的理想:是一種C和shell之間,功能全面,易學易用,可拓展的語言。

1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠調用C語言的庫文件。從一出生,Python已經具有了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。

1994年,Python 1.0 -January 1994 增加了 lambda, map, filter and

reduce。

1999年,Granddaddyof Python web frameworks, Zope 1 was

released in 1999.

2000年,Python 2.0 -October 16, 2000,加入了內存回收機制,構成了現在Python語言框架的基礎。

2004年,Python 2.4 -November 30, 2004, 同年目前最流行的WEB框架Django 誕生。

2006年,Python 2.5 -September 19, 2006.

2008年,Python 2.6 -October 1, 2008.

2008年,Python 3.0 -December 3, 2008.

2009年,Python 3.1 -June 27, 2009.

2010年,Python 2.7 -July 3, 2010.

2011年,Python 3.2 -February 20, 2011.

2012年,Python 3.3 -September 29, 2012.

2014年,Python 3.4 -March 16, 2014.

2014年,In November2014, it was announced that Python 2.7 would be supported until 2020, andreaffirmed that there would be no 2.8

release as users were expected to move to Python 3.4+ as soon as

possible.

2015年,Python 3.5 -September 13, 2015.

2016年,Python3.6.0, documentation released on 23 December 2016

2017年,Python3.6.1, documentation released on 21 March 2017.

如果你仔細看上面的節點肯定會發現,為什麼2008年就發布了Python3.0版本,2010年又發布了Python2.7版本呢?這是因為當時Python3.0發布時,就不在支持Python2.0的版本,導致很多用戶無法正常升級使用新版本,而當時的絕大部分項目都是Python2建立的,所以後來又發布了一個Python2.7的過渡版本,之後的2014年聲明Python2.7會支持到2020年,所以新手還是從Python3.0入手吧。不過,作為新手也不用過於糾結版本問題,因為2.7和3的差別也並沒有達到水火不容的地步,你掌握其中一個版本,之後需要用到另一版本的話,只需要花一點點時間就能快速掌握,遠比你糾結的時間少。

Python的應用領域非常廣泛,簡直就是萬能的。經常有人會問,老師,Python能幹什麼?有多少庫?我都要學嗎?我的回答一般都是:「Python什麼都能幹,但是你得看你要幹什麼,或者對哪方面感興趣。」

下面這幾個方向是目前Python應用最多的地方:

雲計算:OpenStack;

WEB開發: Python擁有眾多優秀的WEB框架,比如Django、Flask等等。許多大型網站均為Python開發,Youtube, Dropbox, 豆瓣……

科學運算: NumPy, SciPy, Matplotlib, Enthought librarys,

pandas;

人工智慧:scikitslearn、Tensorflow

系統運維: 運維人員必備語言,自動化運維必不可少的工具;

金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。主要原因是作為動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很專業,生產效率遠遠高於c,c++,java,尤其擅長策略回測;

遊戲開發:Pygame、pyglet、cocos2d-python;

不過,看起來萬能的語言,我倒不是要你什麼都用Python去做,實際情況還是要選擇適合的語言做對應的工作。比如Python的運行速度就不是最快的了,有速度要求的話,用C++改寫關鍵部分吧。不過對於用戶而言,機器上運行速度是可以忽略的。因為用戶根本感覺不出來這種速度的差異。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

除了畫顆「心」,一行Python代碼還能幹些啥?
CSV文件在Python中的幾種處理方式

TAG:Python |