如何系統地自學 Python?
零基礎情況下,想學一門語言。另 《Python 編程入門經典》這本書怎麼樣,是否值得看?
Python 其實挺簡單的,也挺強大的。
我用 Python 做科學計算,自學一年,也記了一年的筆記。
筆記鏈接:
- Github:lijin-THU/notes-python
- Nbviewer:Jupyter Notebook Viewer
筆記目錄:
- 01. Python 工具
- 01.01 Python 簡介
- 01.02 Ipython 解釋器
- 01.03 Ipython notebook
- 01.04 使用 Anaconda
- 02. Python 基礎
- 02.01 Python 入門演示
- 02.02 Python 數據類型
- 02.03 數字
- 02.04 字元串
- 02.05 索引和分片
- 02.06 列表
- 02.07 可變和不可變類型
- 02.08 元組
- 02.09 列表與元組的速度比較
- 02.10 字典
- 02.11 集合
- 02.12 不可變集合
- 02.13 Python 賦值機制
- 02.14 判斷語句
- 02.15 循環
- 02.16 列表推導式
- 02.17 函數
- 02.18 模塊和包
- 02.19 異常
- 02.20 警告
- 02.21 文件讀寫
- 03. Numpy
- 03.01 Numpy 簡介
- 03.02 Matplotlib 基礎
- 03.03 Numpy 數組及其索引
- 03.04 數組類型
- 03.05 數組方法
- 03.06 數組排序
- 03.07 數組形狀
- 03.08 對角線
- 03.09 數組與字元串的轉換
- 03.10 數組屬性方法總結
- 03.11 生成數組的函數
- 03.12 矩陣
- 03.13 一般函數
- 03.14 向量化函數
- 03.15 二元運算
- 03.16 ufunc 對象
- 03.17 choose 函數實現條件篩選
- 03.18 數組廣播機制
- 03.19 數組讀寫
- 03.20 結構化數組
- 03.21 記錄數組
- 03.22 內存映射
- 03.23 從 Matlab 到 Numpy
- 04. Scipy
- 04.01 SCIentific PYthon 簡介
- 04.02 插值
- 04.03 概率統計方法
- 04.04 曲線擬合
- 04.05 最小化函數
- 04.06 積分
- 04.07 解微分方程
- 04.08 稀疏矩陣
- 04.09 線性代數
- 04.10 稀疏矩陣的線性代數
- 05. Python 進階
- 05.01 sys 模塊簡介
- 05.02 與操作系統進行交互:os 模塊
- 05.03 CSV 文件和 csv 模塊
- 05.04 正則表達式和 re 模塊
- 05.05 datetime 模塊
- 05.06 SQL 資料庫
- 05.07 對象關係映射
- 05.08 函數進階:參數傳遞,高階函數,lambda 匿名函數,global 變數,遞歸
- 05.09 迭代器
- 05.10 生成器
- 05.11 with 語句和上下文管理器
- 05.12 修飾符
- 05.13 修飾符的使用
- 05.14 operator, functools, itertools, toolz, fn, funcy 模塊
- 05.15 作用域
- 05.16 動態編譯
- 06. Matplotlib
- 06.01 Pyplot 教程
- 06.02 使用 style 來配置 pyplot 風格
- 06.03 處理文本(基礎)
- 06.04 處理文本(數學表達式)
- 06.05 圖像基礎
- 06.06 注釋
- 06.07 標籤
- 06.08 figures, subplots, axes 和 ticks 對象
- 06.09 不要迷信默認設置
- 06.10 各種繪圖實例
- 07. 使用其他語言進行擴展
- 07.01 簡介
- 07.02 Python 擴展模塊
- 07.03 Cython:Cython 基礎,將源代碼轉換成擴展模塊
- 07.04 Cython:Cython 語法,調用其他C庫
- 07.05 Cython:class 和 cdef class,使用 C++
- 07.06 Cython:Typed memoryviews
- 07.07 生成編譯註釋
- 07.08 ctypes
- 08. 面向對象編程
- 08.01 簡介
- 08.02 使用 OOP 對森林火災建模
- 08.03 什麼是對象?
- 08.04 定義 class
- 08.05 特殊方法
- 08.06 屬性
- 08.07 森林火災模擬
- 08.08 繼承
- 08.09 super() 函數
- 08.10 重定義森林火災模擬
- 08.11 介面
- 08.12 共有,私有和特殊方法和屬性
- 08.13 多重繼承
- 09. Theano 基礎
- 09.01 Theano 簡介及其安裝
- 09.02 Theano 基礎
- 09.03 Theano 在 Windows 上的配置
- 09.04 Theano 符號圖結構
- 09.05 Theano 配置和編譯模式
- 09.06 Theano 條件語句
- 09.07 Theano 循環:scan(詳解)
- 09.08 Theano 實例:線性回歸
- 09.09 Theano 實例:Logistic 回歸
- 09.10 Theano 實例:Softmax 回歸
- 09.11 Theano 實例:人工神經網路
- 09.12 Theano 隨機數流變數
- 09.13 Theano 實例:更複雜的網路
- 09.14 Theano 實例:卷積神經網路
- 09.15 Theano tensor 模塊:基礎
- 09.16 Theano tensor 模塊:索引
- 09.17 Theano tensor 模塊:操作符和逐元素操作
- 09.18 Theano tensor 模塊:nnet 子模塊
- 09.19 Theano tensor 模塊:conv 子模塊
- 10. 有趣的第三方模塊
- 10.01 使用 basemap 畫地圖
- 10.02 使用 cartopy 畫地圖
- 10.03 探索 NBA 數據
- 10.04 金庸的武俠世界
- 11. 有用的工具
- 11.01 pprint 模塊:列印 Python 對象
- 11.02 pickle, cPickle 模塊:序列化 Python 對象
- 11.03 json 模塊:處理 JSON 數據
- 11.04 glob 模塊:文件模式匹配
- 11.05 shutil 模塊:高級文件操作
- 11.06 gzip, zipfile, tarfile 模塊:處理壓縮文件
- 11.07 logging 模塊:記錄日誌
- 11.08 string 模塊:字元串處理
- 11.09 collections 模塊:更多數據結構
- 11.10 requests 模塊:HTTP for Human
- 12. Pandas
- 12.01 十分鐘上手 Pandas
- 12.02 一維數據結構:Series
- 12.03 二維數據結構:DataFrame
是否非常想學好 Python,一方面被瑣事糾纏,一直沒能動手,另一方面,擔心學習成本太高,心裡默默敲著退堂鼓?
幸運的是,Python 是一門初學者友好的編程語言,想要完全掌握它,你不必花上太多的時間和精力。
Python 的設計哲學之一就是簡單易學,體現在兩個方面:- 語法簡潔明了:相對 Ruby 和 Perl,它的語法特性不多不少,大多數都很簡單直接,不玩兒玄學。
- 切入點很多:Python 可以讓你可以做很多事情,科學計算和數據分析、爬蟲、Web 網站、遊戲、命令行實用工具等等等等,總有一個是你感興趣並且願意投入時間的。
廢話不多說,學會一門語言的捷徑只有一個: Getting Started
? 起步階段
任何一種編程語言都包含兩個部分:硬知識和軟知識,起步階段的主要任務是掌握硬知識。
°1 硬知識
「硬知識」指的是編程語言的語法、演算法和數據結構、編程範式等,例如:變數和類型、循環語句、分支、函數、類。這部分知識也是具有普適性的,看上去是掌握了一種語法,實際是建立了一種思維。例如:讓一個 Java 程序員去學習 Python,他可以很快的將 Java 中的學到的面向對象的知識 map 到 Python 中來,因此能夠快速掌握 Python 中面向對象的特性。
如果你是剛開始學習編程的新手,一本可靠的語法書是非常重要的。它看上去可能非常枯燥乏味,但對於建立穩固的編程思維是必不可少。
下面列出了一些適合初學者入門的教學材料:
?「笨方法學 Python」:http://learnpythonthehardway.org/book/
這本書在講解 Python 的語法成分時,還附帶大量可實踐的例子,非常適合快速起步。
?「廖雪峰的 Python 2.7 教程」:Home - 廖雪峰的官方網站
Python 中文教程的翹楚,專為剛剛步入程序世界的小白打造。
?「The Hitchhiker』s Guide to Python!」:The Hitchhiker』s Guide to Python!
這本指南著重於 Python 的最佳實踐,不管你是 Python 專家還是新手,都能獲得極大的幫助。
?「Python 官方文檔」:Our Documentation
實踐中大部分問題,都可以在官方文檔中找到答案。
? 輔助工具:Python Tutor
一個 Python 對象可視化的項目,用圖形輔助你理解 Python 中的各種概念。
用一種方法,最好是只有一種方法來做一件事。
學習也是一樣,雖然推薦了多種學習資料,但實際學習的時候,最好只選擇其中的一個,堅持看完。
必要的時候,可能需要閱讀講解數據結構和演算法的書,這些知識對於理解和使用 Python 中的對象模型有著很大的幫助。
°2 軟知識
「軟知識」則是特定語言環境下的語法技巧、類庫的使用、IDE的選擇等等。這一部分,即使完全不了解不會使用,也不會妨礙你去編程,只不過寫出的程序,看上去顯得「傻」了些。
對這些知識的學習,取決於你嘗試解決的問題的領域和深度。對初學者而言,起步階段極易走火,或者在選擇 Python 版本時徘徊不決,一會兒看 2.7 一會兒又轉到 3.0,或者徜徉在類庫的大海中無法自拔,Scrapy,Numpy,Django 什麼都要試試,或者參與編輯器聖戰、大括弧縮進探究、操作系統辯論賽等無意義活動,或者整天跪舔語法糖,老想著怎麼一行代碼把所有的事情做完,或者去構想聖潔的性能安全通用性健壯性全部滿分的解決方案。
很多「大牛」都會告誡初學者,用這個用那個,少走彎路,這樣反而把初學者推向了真正的彎路。
還不如告訴初學者,學習本來就是個需要你去走彎路出 Bug,只能腳踏實地,沒有奇蹟只有狗屎的過程。
選擇一個方向先走下去,哪怕臟丑差,走不動了再看看有沒有更好的解決途徑。
自己走了彎路,你才知道這麼做的好處,才能理解為什麼人們可以手寫狀態機去匹配卻偏要發明正則表達式,為什麼面向過程可以解決卻偏要面向對象,為什麼我可以操縱每一根指針卻偏要自動管理內存,為什麼我可以嵌套回調卻偏要用 Promise...
更重要的時,你會明白,高層次的解決方法都是對低層次的封裝,並不是任何情況下都是最有效最合適的。
技術湧進就像波浪一樣,那些陳舊的封存已久的技術,消退了遲早還會涌回的。就像現在移動端應用、手游和 HTML5 的火熱,某些方面不正在重演過去 PC 的那些歷史么?
因此,不要擔心自己走錯路誤了終身,堅持並保持進步才是正道。
起步階段的核心任務是掌握硬知識,軟知識做適當了解,有了穩固的根,粗壯的枝幹,才能長出濃密的葉子,結出甜美的果實。
? 發展階段
完成了基礎知識的學習,必定會感到一陣空虛,懷疑這些語法知識是不是真的有用。
沒錯,你的懷疑是非常正確的。要讓 Python 發揮出它的價值,當然不能停留在語法層面。
發展階段的核心任務,就是「跳出 Python,擁抱世界」。
在你面前會有多個分支:科學計算和數據分析、爬蟲、Web 網站、遊戲、命令行實用工具等等等等,這些都不是僅僅知道 Python 語法就能解決的問題。
拿爬蟲舉例,如果你對計算機網路,HTTP協議,HTML,文本編碼,JSON一無所知,你能做好這部分的工作么?而你在起步階段的基礎知識也同樣重要,如果你連循環遞歸怎麼寫都還要查文檔,連 BFS 都不知道怎麼實現,這就像工匠做石凳每次起錘都要思考鎚子怎麼使用一樣,非常低效。
在這個階段,不可避免要接觸大量類庫,閱讀大量書籍的。
°1 類庫方面
「Awesome Python 項目」:vinta/awesome-python · GitHub
這裡列出了你在嘗試解決各種實際問題時,Python 社區已有的工具型類庫,如下圖所示:
你可以按照實際需求,尋找你需要的類庫。
至於相關類庫如何使用,必須掌握的技能便是閱讀文檔。由於開源社區大多數文檔都是英文寫成的,所以,英語不好的同學,需要惡補下。
°2 書籍方面:
這裡我只列出一些我覺得比較有一些幫助的書籍,詳細的請看豆瓣的書評:
科學和數據分析:
?「集體智慧編程」:集體智慧編程 (豆瓣)
?「數學之美」:數學之美 (豆瓣)
?「統計學習方法」:統計學習方法 (豆瓣)
?「Pattern Recognition And Machine Learning」:Pattern Recognition And Machine Learning (豆瓣)
?「數據科學實戰」:數據科學實戰 (豆瓣)
?「數據檢索導論」:信息檢索導論 (豆瓣)
爬蟲:
?「HTTP 權威指南」:HTTP權威指南 (豆瓣)
Web 網站:
?「HTML CSS 設計與構建網站」:HTML CSS設計與構建網站 (豆瓣)
...
列到這裡已經不需要繼續了。
聰明的你一定會發現上面的大部分書籍,並不是講 Python 的書,而更多的是專業知識。
事實上,這裡所謂「跳出 Python,擁抱世界」,其實是發現 Python 和專業知識相結合,能夠解決很多實際問題。這個階段能走到什麼程度,更多的取決於自己的專業知識。
? 深入階段
這個階段的你,對 Python 幾乎了如指掌,那麼你一定知道 Python 是用 C 語言實現的。
可是 Python 對象的「動態特徵」是怎麼用相對底層,連自動內存管理都沒有的C語言實現的呢?這時候就不能停留在表面了,勇敢的拆開 Python 的黑盒子,深入到語言的內部,去看它的歷史,讀它的源碼,才能真正理解它的設計思路。
這裡推薦一本書:
「Python 源碼剖析」:Python源碼剖析 (豆瓣)
這本書把 Python 源碼中最核心的部分,給出了詳細的闡釋,不過閱讀此書需要對 C 語言內存模型和指針有著很好的理解。
另外,Python 本身是一門雜糅多種範式的動態語言,也就是說,相對於 C 的過程式、 Haskell 等的函數式、Java 基於類的面向對象而言,它都不夠純粹。換而言之,編程語言的「道學」,在 Python 中只能有限的體悟。學習某種編程範式時,從那些面向這種範式更加純粹的語言出發,才能有更深刻的理解,也能了解到 Python 語言的根源。
這裡推薦一門公開課
「編程範式」:斯坦福大學公開課:編程範式
講師高屋建瓴,從各種編程範式的代表語言出發,給出了每種編程範式最核心的思想。
值得一提的是,這門課程對C語言有非常深入的講解,例如C語言的范型和內存管理。這些知識,對閱讀 Python 源碼也有大有幫助。
Python 的許多最佳實踐都隱藏在那些眾所周知的框架和類庫中,例如 Django、Tornado 等等。在它們的源代碼中淘金,也是個不錯的選擇。
? 最後的話
每個人學編程的道路都是不一樣的,其實大都殊途同歸,沒有迷路的人只有不能堅持的人。雖然聽上去有點雞湯,但是這是事實。
希望想學 Python 想學編程的同學,不要猶豫了,看完這篇文章,Just getting started~
另外,歡迎私信本喵交流 Python 的學習經驗哦 &> .&<原文地址:Python超簡潔教程,現在就開始加入數據科學大軍
在過去的幾年間,使用 Python 這門語言作為數據科學研究工具的人數逐年得到攀升,根據 O"Reilly數據科學從業者薪酬調查報告,54%的受訪者都在使用 Python 作為首選語言,這個數據要比2015年的調查結果——51%還要高一點。
沒人可以否認 Python 已經逐漸成為了數據科學產業以及智能化時代的先頭兵,而且必定會在未來繼續保佑這種優勢。毫無疑問,無論是逐漸擴大的業界份額,還是海量的數據科學庫件,以及平緩的學習曲線,Python 作為一門程序語言,幾乎已經沒有比它更適合作為數據科學的實踐工具了。
當然,Python 易學好懂,但如果你是剛入行的學生或是從業者,你仍然需要一些基本的程序語言知識來幫你度過一開始的難關。因此,我(指作者,譯者注)為各位數據科學家,尤其是初學者準備了一個小攻略。這個小攻略可以方便大家快速查閱在數據科學研究過程中的一些程序用法,也可以作為一本指南幫助大家更快更好地掌握 Python。
這本小攻略與 DataCamp 的課程《數據科學所用到的 Python》有所關聯,大家可以配合閱讀。
如需下載 PDF 版本,請點擊這裡。這本小攻略提及了 Python 中諸如變數、數據類型、字元串、列表等基礎知識以及一些科學計算所用的基本庫件如 Numpy 等等。下面是文檔截圖。
(為方便大家閱讀,譯文將原始文檔截圖轉換呈現在此。——譯者注)
受知乎編輯器限制,集智無法在此提供一個很好的操作環境,請大家點擊這裡前往主站,點擊運行嘗試跑跑程序。
我們提供了一些Python入門的知識,方便大家實踐。大家可以在移動端和PC端無障礙享受運行程序的快感,部分代碼截圖如下:
歡迎你來。
討論組:
官方微博:@景略集智
微信公眾號:景略集智
集智QQ群:557373801
商務合作:chenyang@jizhi.im
投稿轉載:kexiyang@jizhi.im
我是真正零基礎開始學Python的,從一開始的一竅不通,到3個月後成功搭建了一個動態網站(沒有用任何框架)。相比於計算機大牛,我更加知道一個小白將會遇到什麼坑,遇到哪些難點。我把我的學習過程寫在下面,並附上在每個階段的學習資料,希望對零基礎的Python學習者有所幫助。
註:本文只做經歷分享,不是技術探討。
---
在知乎上常常看到想要轉行IT,或者是想學習編程但不知如何開始的朋友。回答這類問題的人往往只是列出書單資源然後給出一個大致的方向。有些朋友一開始就扎入了理論學習的汪洋大海,從苦讀類似《演算法導論》開始,能夠堅持讀下來的寥寥無幾,學習的積極性也被不斷的挫敗感消磨的所剩無幾。
一直以來,編程對我而言是一種「黑魔法」般的存在。今年阿里月餅門,當很多人都參與到是非之爭的時候,我更加著迷於程序員區區幾行代碼的腳本所展現出的威力,對於外行而言,這是超乎他們想像之外的某種能力——為什麼我守在電腦面前盯著秒針然後拚命點擊滑鼠都不一定能搶到的禮物,程序員只需要提前花5分鐘寫3行代碼就輕鬆搞定?
所以,我的心底深處一直都想變成這樣的一位魔法師。今年的8月,剛好工作上想要開發一個基於微信的英語學習網站,藉此機會,我決定好好學習一下編程。在此之前,我所有關於程序的知識僅僅來源於兩部分,一是本科時期的C語言必修課,現在已經忘的一乾二淨,不過好歹我從中明白編程是怎麼回事;第二部分是大概兩年前由於工作關係學的一些Python,不過只是皮毛,現在忘的七七八八。
簡單說,我的目標是建立一個網站,不過這個網站是動態的,也就是說它能識別誰登陸,然後對不同的人顯示不同的內容。而當時的現實是,我完全不明白網頁是如何顯示出來的?譬如每個人登陸知乎的時候看到的是定製化的頁面,後台是如何基於每個ID來組織出不同的頁面的?所有我們看到的問題,回答,參與的評論在背後的伺服器上是以一種什麼樣的形式存在的?又比如為什麼有些頁面只能在微信端打開,在電腦上就會出錯?(不知道你有沒有發現這一點)
當時我的心中充滿了無數個類似的問號?當然如果你也是小白,一定有著同樣的疑問。
好處是一開始就明確了學習的目的:Web建站。所以我的學習方案基本就是通過做項目學習,哪裡不懂就解決哪裡,邊做邊學習,不斷推進。另外,由於知道很多成功的網站在用Python做伺服器開發,比如知乎,所以我就自然選擇了Python。
於是我就開始了我充滿著挫敗感和成就感的編程之路……
從8月到12月的四個月里,除去本來的工作,為了學習質量,我會保證平均每天4個小時的學習時間,周末也不例外。另外,所有的文檔,問答都盡量看英文的,這可以幫你剩下大量的時間。12月13日,我做的網站上線了,3天時間大概有5000人訪問了這個網站,我有時在後台看著日誌,不免有些心潮噴涌,我想把自己的經驗寫下來,希望對於那些有心學習編程但無從下手的朋友提供一些幫助和鼓勵。
1. 我的自學編程之路
1)基礎
剛開始的時候,我對搭建網站一無所知。為了給自己迅速建立一個框架,我在Google上面泡了整整一天,了解了HTML,CSS,JavaScript,Ajax,jQuery,React,SQL,伺服器腳本等等知識,不求精通,只是了解每一項技術是幹嘛的,另一方面建立起了一個學習的roadmap,這樣大概知道做一個Web App需要哪些知識,分別學習的主次順序。重點推薦兩個資源:
Python基礎知識:Learn Python the Hard Way
Web App基礎知識:@張秋怡的答案寫的通俗易懂,極力推薦。
有了這個roadmap,我明白了前端三大必須掌握技能HTML,CSS和JavaScript,花了大概10天左右把W3Schools上的教程全部過了一遍,然後試著寫了幾個網頁,感覺自己寫的很沒有底氣。於是根據知乎和豆瓣上的推薦,買了《JaveScript DOM》和《Head First HTML與CSS》,邊看書邊把例子過了一遍。
W3Schools: www.w3schools.com/
JavaScript:JavaScript DOM編程藝術
HTML CSS : Head First HTML與CSS(第2版)
前端是需要慢慢學習的,在看完上面的資料後,雖然能寫出來一些挺漂亮的頁面,但是我自己知道很多都是不符合標準的,更不要說代碼風格什麼的。這隻能通過不斷地積累和增加代碼量來提高。由於明白伺服器端需要耗費自己大量的時間,所以在發現自己能夠按照構思勉強實現網頁之後,我就把學習中心放到了伺服器端上。不過每天還是會抽空寫一寫網頁,避免手生。
2)伺服器端
最先了解的是HTTP協議,也就是瀏覽器和伺服器之間是如何通信的。也就是當你在瀏覽器里鍵入網址按下回車直到網頁顯示在你瀏覽器的這個過程中,瀏覽器和瀏覽器之間發生了什麼事情。這是很有意思的內容,我是以讀小說的心情了解了這部分內容。了解這部分後,你就會明白類似為什麼有時候會有404頁面?在百度搜索框里鍵入的搜索詞是如何提交到百度伺服器的?為什麼重新登錄知乎的時候就不用再輸入密碼了?之類的問題了。
HTTP協議學習資料:In Introduction to HTTP Basics
@Vamei的博客:協議森林
了解了HTTP協議之後,我就多少有些入迷了。看似神秘難懂的現象其實原理並不複雜,你反而會被吸引。接下來就進入到我投入時間最多的部分了——後端開發。記得當時了解Web開發的MVC(Model-View-Controller)模式後,有一種心血噴涌的感覺,覺得太有意思了(程序員別噴,我就是這麼沒見過世面)。我們以知乎為例子來說明MVC是個啥:
每個人的主頁都是相同的布局和風格,例如最上面的菜單搜索欄,顏色分割,左邊顯示動態等,右邊是個人信息等,然後具體的內容卻因人而異——每個人的頭像,名字,動態都是不一樣的。那麼知乎是如何保證每一個人看到的都是自己的主頁呢?
你可以把這個相同的布局想像成一個模板,裡面有一個個空格子,當你用你的賬戶登陸頁面時,想像你的電腦里有無數個小人根據你的賬號從知乎後台的資料庫里取出你的頭像,動態,認證信息等等內容,然後對應著模板上規定好的位置,把對應的內容填進去。這些小人的動作實在是太快了,以至於你覺得這是在瞬間完成的。
上面所說的模板就是MVC中的V,是View的縮寫,負責顯示。這樣做的好處在於,如果知乎有一天突然想改變一下個人主頁的風格,那麼只需要改變這一個模板,然後幾千萬註冊用戶的主頁就相應的變化了,因為模板是公用的,是不是省了很多事情?(早期的Web開發可不是這樣喲,你可能要一個個用戶去改,非常麻煩。)
而這些小人除了擺放內容,它們真正負責的是業務邏輯,我們把他們叫做Controller,也就是MVC中的C。例如當你登陸的時候,這些小人要檢查你的用戶名是不是準確的,如果準確,它們要去資料庫里取出你請求的信息等,如果用戶名錯誤,它們要攔截住你的登陸。它們的職責還有很多,無法一一列舉。在實際中,這些小人做的事情其實就是Python(或者其它腳本語言)做的事情。
最後,MVC中的Model其實就是傳給View的數據,包括上面的頭像,用戶名,動態等因人而異的數據。這些數據在知乎伺服器上是以資料庫表格(table)的形式存在的,你可以把它們想像成很多不同的excel表格,不同的表格儲存著不同的信息,有些記錄著知乎用戶的個人信息,有些記錄著回答,有些記錄著評論等等,而這些表格之間又彼此聯繫,當你在知乎的不同網頁間跳轉的時候,上面說的那些小人就根據你的要求,組合對應的表格取出對應的數據,然後把他們放到模板對應的空格里,發送給瀏覽器。然後瀏覽器根據你寫的CSS,用不同的顏色,大小等等,將數據很漂亮的顯示出來。
這樣做的好處是什麼呢?雖然你最終在瀏覽器里看到的是一個完整的頁面,但是在後端邏輯上它們都是區分開的——模型(M),視圖(V)和控制器(C)的區分就保證了較高的可維護性——我可以隨時修改主頁的顯示並看到效果,同樣我可以隨時加入一些業務邏輯。
如果你的學習堅持到這裡了,首先要恭喜你。其次你可能已經知道一些非常成熟的Python Web框架了,例如Django,Flask等等,並且你可能看到了很多小白教程教你直接使用,畢竟大部分人可能覺得沒有必要重複造輪子。
本來為了省事,我也打算直接用框架。我是在設計資料庫的時候,當時在看SQLAlchemy文檔,覺得相對自己的項目SQLAlchemy太過複雜,所以我決定自己寫自己的ORM(名詞不懂沒關係),這對於當時的我來說是一件難度非常大的事情。於是我投入了極大的精力每天都在看關於SQL和Python相關的教程和資料,Python核心編程(第二版) 給了我很大的啟發。在自己完成了ORM後,又寫了URL處理函數,同樣沒有用任何現成的Web框架。
現在回頭看,我認為這一段時間的造輪子是提升編程能力最快的時候。比如為了寫ORM,就必須去花很多時間學習SQL,去了解Python裡面的metaclass,而如果用一個現成的框架,我很有可能偷懶不去關注某些細節。而不出問題還好,一旦出問題,我就只能跪。另外,造輪子迫使我在開始的時候就構思整個框架,因為我必須儘可能的考慮到所有的情況,於是就會不斷的強迫自己完善知識體系,和別人的代碼作對比從而改進自己的,這個過程充滿了無盡的挫敗感,但是得來的成就和快樂也是無可比擬的。
SQL書籍:Sams Teach Yourself MySQL in 21 Days
Python:Python核心編程(第二版)
Github上的優質Python資源:CodementorIO/Python-Learning-Resources
過程中還牽涉到部署,我的網站是跑在Linux上的。關於部署網上有非常多的優質教程,一搜一大把。這裡就不再贅述。
這些是我學習大致路線,當然過程中充滿著小的磕磕絆絆,雖然網站上線了,貌似運行還比較順利,但是如果以一個程序員的標準來要求自己,自己依然非常菜鳥。不過我並沒有以前那樣懼怕技術了,就像你明白魔術的背後的原理後,會更多的思考原理本身。
2. 自學編程需要注意的問題
很多人都推薦小白第一門語言選Python,因為語法簡單。這句話只說了一半,Python確實容易上手,對初學者的門檻很低。但我發現,對於小白真正的門檻在於系統知識,這就和用什麼語言完全沒有任何關係了。例如很多人學完了Python的語法,覺得確實簡單,但是轉頭去用Python標準庫的時候,卻發現自己連文檔都看不懂。標準庫提供了Python和其它系統功能的介面,最終實現了Python和系統之間的互動。讀標準庫需要系統知識,比如操作系統,資料庫,進程和線程,socket編程,網路協議等等,這些對於編程小白來才構成很高的門檻,但是只有學會這些,才能真正發揮出Python的威力來。
這也是我覺得自己的經歷對小白是有價值的一個原因。因為設計一個動態的網頁是一個很不錯的練手Project。建立網頁(Web App)會逼迫你了解從你在瀏覽器里鍵入地址按下回車到網頁顯示在瀏覽器的過程中,瀏覽器,網路,伺服器都幹了些什麼。具體到技術上面,你不得不去學習前端的HTML,CSS和JavaScript,後端的腳本,資料庫,操作系統等。也就是說,這個過程能夠促使你去主動學習上面提到的系統知識,如果你再做另外一個項目,你就不會像現在這樣無從下手,而有能力去進行一些技術性的探討,所以我認為這是一個非常好的練手項目。
1)一定要空出時間補充理論知識
很多人會強調learn by doing,邊做項目邊學習,這也是我自己採用的方式。在這種方式中,你不斷犯錯,改正……學習效率非常高。但是,很多人走了極端,最後的結果就是不注意理論知識的學習。你會發現自己Google的能力越來越高,但是真實的編程能力並沒有得到提升。如果有這種情況,你需要反思一下。一種可能是你太過於依賴各種成熟的框架,結果編程就變成了用「膠水」去粘合不同的框架完成需求。就好比你的Web App用了SQLAlchemy,雖然自己不太懂SQL,但是網站跑的也還不錯。這時候如果資料庫出現了問題,那你就只能跪了。
另外一種可能是你完全沉浸在做項目中,忽略了學習理論知識。做項目雖然充滿困難,但回報是強烈的成就感,很容易沉浸其中。我覺得這是極其錯誤的。首先半路出家的程序員都沒有經過系統的學習,沒有形成自己的知識體系,如果你不懂數據結構,演算法複雜度,操作系統這些理論,那麼你能達到的高度就極其有限。所以,在每天做項目的同時,一定要保證抽出一定的時間,惡補理論知識。這部分的書單在豆瓣和知乎上都有很多總結,可以自行搜索。
2)不要太糾結於無意義的問題,比如什麼框架好,XX語言比XX語言好啦這種問題。前期確定了練手項目,就去專心積累代碼量,積累基礎知識。那些你現在還看不懂的炫酷技術你慢慢也就能明白是怎麼回事了,反而沒有基礎,再炫酷的框架對你而言都是天書。
3)學會發問。好問題是建立在你自己已經實踐或者思考的基礎上問出來的,這是對自己的負責,也是對別人的尊重。不要一遇到困難就喜歡直接上網搜索:「這個問題是怎麼回事啊?」,「我不明白你能不能幫我看看……」。
4)學好英語。
THE END
最後,給自己打個廣告,如果學英語,一定要關注我。
http://weixin.qq.com/r/ETt0bGzEkzHsrSgP924D (二維碼自動識別)
更新:補充了圖片(昨天居然沒圖了orz囧)
想要系統自學,首先當然是要搭建Python體系了。
大部分自學者沒有知識體系可言,這是無法避免的困局。知識體系並不是你看幾篇文章就能搭建起來的——在你對很多內容一無所知的情況下怎麼可能形成完成的體系呢?
所以初步學習的時間裡,最好的辦法是什麼?
走前人的路。
按照已經成熟的路線去前進,在接近走完的時候,按照自己的學習深度和技能需求重新整理,然後對知識架構中的缺漏作補充。
所以,想要系統自學按照別人的經驗來是最快的,也是我非常推薦的一條學習路徑。
下面是一條非常全面的Python學習路線,題主可以用來做個參考。(我也是照著這張圖來的)
圖片作者是:nonoBoy - 簡書
類似於這樣的路線圖網路上有很多,如果覺得以上的路線不太符合技能需求,題主可以自行發掘一些其他的路線圖。記得要查證路線的可執行度,選錯了的話會很難受。
有了路線之後,剩下的就是執行問題了。執行細節主要有兩個方面,資源發掘和學習過程。
學習資源:
準備階段
在開始之前我建議你補充自己的計算機基礎知識——你用來考計算機二級證書的那點東西完全不夠用。
考慮到啃大部頭的難度足以把人逼瘋,所以這裡就直接推薦兩門課程好了。我接觸這兩門課陳源於
@蕭井陌大神的推薦。
計算機科學和Python編程導論(自主模式)
哈佛大學公開課:計算機科學cs50
額外附送:麻省理工學院公開課:演算法導論
對於初學者而言,把這三門課學習一下就夠了。如果你甘之如飴,可以做更深的嘗試,去閱讀諸如《計算機科學導論》、《演算法導論》這樣的書籍。
如果真的啃下來,恭喜,你的學習之路再也不會有更大的難關了。
入門階段
得益於Python的特性,你會發現入門的路徑堪稱無窮無盡——單單是在知乎就有無數的教程來解答你的問題。在這時候,你簡單了解一下Python的相關北京之後就開始學習語法吧。
簡單說,這一時段的閱讀資料如下:
- 廖雪峰的官方網站
- 菜鳥教程
- 《簡明 Python 教程》
- 《父與子的編程之旅》
- 《笨辦法學Python》
我的建議是,挑選其中任何一個來學習就可以了。特別推薦廖雪峰的Python教程和簡明Python。
視頻教程:
程序設計入門-Python - 網易雲課堂
補充階段
目前Python web使用比較多的框架,Django、Flask。(Tensorflow這種level太高,就不多說了)
專欄:Django實戰——CSDN同類專欄閱讀量第一
被解放的姜戈——很經典也很引人的教程
Welcome to Flask——Flask官方文檔
這三個基本上足夠你掌握基礎知識,想要更加深入就要親自動手來學習了。
實戰階段
說實話,可以實戰的項目是在太多了。當你掌握了語法、熟悉了框架,不去做實戰還等什麼呢?
我相信這段時間裡你會有很多想做的事,也會遇到很多困難,但是絕不會比學演算法更困難了。
來這裡,找你最喜歡的項目:https://www.zhihu.com/question/29372574
學習過程
學習從來不是一件簡單的事。即使Python已經被視為最容易入門的語言,但學習過程也稱不上愉悅。
別迷信什麼21天精通或者7天入門之類的謊言。在這種引導下,除了虛無的膨脹感你不會得到任何東西。
保持正確的方向和學會一樣重要。如果你想做開發,就別只看爬蟲教程,如果你想做數據,就先去學點數學。
試著自己去判斷一個技能的重要程度。正確衡量學習成本,把時間花在你最需要的技能上。
最近開始系統的學習Python,以及整理的一些資料。github記錄著個人自學 Python 的過程,持續更新。歡迎大家一起來完善這個自學Python學習的項目,給後來者一個參考的學習過程。
github項目地址:shfanzie/Systematically_self-study_Python
如何系統地自學 Python ?
網上 Google 、百度文章一大把,不知道從何學起,只會使初學者更加的迷惑。首先,我推薦一篇 彭貓 在知乎上的回答:如何系統地自學 Python ?希望能給大家一個系統地學習Python有點幫助。
知乎上聚集著非常多的程序員,你能找到各種條目的詞條。例如:Python 詞條下面的索引也能給你學習上很大的幫助。當然,遇到不懂的技術細節 Google 或者 stackoverflow 上去搜索相關的解決方案,以及參考維基百科的詞條。
學習框架:
3W:why、what、how。你為什麼要學習 Python,以及 Python 能幹什麼,那麼怎麼去學習 Python ? Python 可以讓你做很多事情,科學計算和數據分析、爬蟲、Web 網站、遊戲、命令行實用工具等,以上列舉的總有一種是你學習Python感興趣的吧!
1、入門- 學習 Python 的語法知識、演算法和數據結構、編程範式等。
學習 Python 的語法技巧、類庫的使用、IDE使用等。
(持續更新中···)
2、進階
利用 Python 結合專業知識解決具體的實際問題。
(持續更新中···)
3、深入
了解 Python 的「內核」,也就是分析 Python 的源代碼。
(持續更新中···)
MORE:
慕課網視頻教程
Python 初學者的最佳學習資源
Python 學習資料總結
一篇文章入門 Python 生態系統
如何像 Python 高手( Pythonista )一樣編程
Python Module of the Week
Full Stack Python
免費的計算機編程類中文書籍:一個免費的編程中文書籍索引,你可查看 Python 下的經典書籍。
@蕭井陌:編程入門指南 v1.5:本指南更多講的是學習中多問幾個 Why,深入了解其背後的技術細節等。
最後引用【彭貓】的話:每個人學編程的道路都是不一樣的,其實大都殊途同歸,沒有迷路的人只有不能堅持的人。雖然聽上去有點雞湯,但是這是事實。
Funny Things:
教你閱讀 Python 開源項目代碼
有哪些適合新手練手的 Python 項目?
可以用 Python 編程語言做哪些神奇好玩的事情?
Python 的練手項目有哪些值得推薦?Wayne Shi的回答
Python 的練手項目有哪些值得推薦?小小搬運工的回答
Python參考學習資料:
- 笨辦法學 Python中文版:這本書在講解 Python 的語法成分時,還附帶大量可實踐的例子,非常適合快速起步。
- Python 快速教程-Vamei 的博客
- 廖雪峰 Python 2.7 中文教程
- 廖雪峰 Python 3 中文教程:Python 中文教程的翹楚,專為剛剛步入程序世界的小白打造。
- Python 最佳實踐指南:這本指南著重於 Python 的最佳實踐,不管你是 Python 專家還是新手,都能獲得極大的幫助。
- Python 官方文檔2.73.5:實踐中大部分問題,都可以在官方文檔中找到答案。
- Awesome Python:這裡列出了你在嘗試解決各種實際問題時,Python 社區已有的工具型類庫。
- 簡明 Python 教程
- 零基礎學 Python 第一版
- 零基礎學 Python 第二版
- 知乎周刊·編程小白學Python
- 可愛的 Python
- Python 核心編程 第二版 CPyUG譯
- Python 精要教程
- Python 2.7 官方教程中文版
- Python 3.3 官方教程中文版
- Python Cookbook 中文版
- Python3 Cookbook 中文版
- Think Python
- Think Python 2ed中文版
- Python 正則表達式操作指南
- Python進階
- 深入 Python
- 深入 Python 3
- 精通 Python 設計模式
- python 安全編程教程
- 程序設計思想與方法
- Python 標準庫 中文版
- PEP8 Python代碼風格規範
- Google Python 風格指南 中文版
- Twisted 與非同步編程入門
- TextGrocery 中文 API ( 基於svm演算法的一個短文本分類 Python 庫 )
- Requests: HTTP for Humans
- Pillow 中文文檔
- PyMOTW 中文版
- Fabric 中文文檔
- Beautiful Soup 4.2.0 中文文檔
- Python 繪圖庫 matplotlib 官方指南中文翻譯
- Scrapy 0.25 文檔
- 用Python做科學計算
- Scipy 講義
- Python 量化交易教程
- Python自然語言處理中文版 (感謝陳濤同學的翻譯,也謝謝 @shwley 聯繫了作者)
- Sphinx 中文文檔
- Django
- Django 1.5 文檔中文版 正在翻譯中
- Diango 1.7 文檔中文版 正在翻譯中,目前只翻譯了目錄
- Django 1.8.2 文檔中文版 正在翻譯中
- Django 最佳實踐
- Django搭建簡易博客教程
- The Django Book 中文版
- Django 設計模式與最佳實踐
- Django 網站開發 Cookbook
- Django Girls 學習指南
- Flask
- Flask 文檔中文版
- Jinja2 文檔中文版
- Werkzeug 文檔中文版
- Flask之旅
- Flask 擴展文檔匯總
- Flask 大型教程
- SQLAlchemy 中文文檔
- web.py
- web.py 0.3 新手指南
- Web.py Cookbook 簡體中文版
- Tornado
- Introduction to Tornado 中文翻譯
- Tornado源碼解析
- Tornado 4.3 文檔中文版
從machine learning或者web或者爬蟲入手Python,會比較有成就感,不枯燥
天天print,初學者學個幾天就沒動力了
我推薦,machine learning in action,一點點線性代數基礎即可閱讀此書
web學習flask,遇到不懂的語法查文檔
爬蟲學習scrapy,同上,遇到不懂的語法查文檔
真的,用Python寫個預測足球比賽結果的小程序或個人博客或抓取微博數據,比天天對著書上無聊的print好多了放乾貨 更新時間2017年8月7日
要爆炸!!!!!!!!!!!!!不用謝!兄弟們拿去吧。
歡迎關注我小密圈喲
Python 簡明教程
Python 基礎教程
Python Cookbook
python3 自學的話 推薦學習Python開發視頻教程 http://www.maiziedu.com/course/13/
視頻教程學起來比較容易
學pythob3吧 小甲魚的視頻挺不錯 http://blog.fishc.com/category/python
https://github.com/justjavac/free-programming-books-zh_CN
學會找資料,也是一種能力。
這個教程很不錯哦 https://github.com/qiwsir/StarterLearningPython/blob/master/index.md
看一些基本的語法(特色部分), 然後找個自己感興趣的小需求,用它來完成。
啄木鳥社區有很多資源,它也許可能幫助到你
http://wiki.woodpecker.org.cn/moin/
這裡
http://readthedocs.org/docs/learn-python-the-hard-way-zh_cn-translation/en/latest/
不用學,直接用就好,隨時去 啄木鳥 社區 http://wiki.woodpecker.org.cn/ 查:
我常用: Python基礎詞典 === 快速手冊 ======= 絕對簡明手冊 http://wiki.woodpecker.org.cn/moin/PyAbsolutelyZipManual
深入Python系列 http://wiki.woodpecker.org.cn/moin/PythonPeruse
== Python 精要參考(第二版)
真心覺得這個就挺好 http://readthedocs.org/docs/learn-python-the-hard-way-zh_cn-translation/en/latest/
http://bbs.pinggu.org/thread-3753704-1-1.html
http://wiki.woodpecker.org.cn/moin/PyBooks
http://www.codecademy.com/learn 在線練習
http://learnpythonthehardway.org/book/ 笨辦法學python
http://www.2cto.com/shouce/Pythonbbf/index.html 我找到的上面的中譯版本,不過是第二版
個人推薦:Python 2.7教程
http://bcmi.sjtu.edu.cn/~zhaohai/ptm2012/data/byteofpython_chn.pdf
給個乾貨PDF
Home - 廖雪峰的官方網站
Nick Parlante: https://developers.google.com/edu/python/
Michael Driscoll: https://gumroad.com/l/bppWr
Codecademy - learn to code, interactively, for free
Python很簡單的,很容易學。我看這本書,就花了一節課的功夫,40分鐘,就學完了。
但問題在於,因為不常用,每次用之前,都得再花40分鐘。。。
哎,為啥一刷知乎,首頁就出現這樣的話題,導致我又點進來回答了,所以再寫寫,嘿嘿……
入門啊,一定要看書籍,書籍系統,《Python入門經典》這本書對於初學者來說還是可以的,可以先看看,畢竟比較簡單直白,無論怎麼說說要自己看了才知道好不好,是吧?!這裡有個配套的在線實驗學習課程,可以配合書籍來學習,有在線開發環境,還蠻適合初學者的:Python - 《Python入門經典》配套實驗
其次是可以看看一些不錯的博客的,比如廖雪峰老師的,Vamei老師的博客,講解python的也非常不錯,推薦:- Vamei老師的python快速入門博客:Python - Python快速教程
- 廖雪峰老師的python博客:Python教程 - 廖雪峰的官方網站
嗯,還有Flask框架和Django框架,了解是必須的:
- Python - Python Flask Web框架
- Python - Python Django Web框架
如果你想要了解科學計算或者數據分析的話,這方面的知識倒是可以看看,這裡也有幾個不錯的課程可以看看:
- Python - Python科學計算(一)
主要學習 Numpy,Scipy,Matplotlib,Sympy 等科學計算相關庫的使用;
- Python - Python科學計算(二)
主要學習Pandas,Scikit-learn,Scikit-image 的基礎使用;
- Python - Python 數據分析(一)
學習 pandas 基礎,數據載入、存儲與文件格式,數據規整化,繪圖和可視化的知識;
- Python - Python 數據分析(二)
學習利用 Python 數據聚合與分組運算,時間序列,金融與經濟數據應用等相關知識;
當然,以上都只是基礎理論知識,學習的過程中可以夾雜著小開發項目來學習,所以再介紹一些不錯的python項目吧:- Python - 200行Python代碼實現2048
- Python - Python 圖片轉字元畫
- Python - 基於scrapy爬蟲的天氣數據採集(python)
- Python - Flask開發輕博客
- Python - Python 破解驗證碼
- Python - Python 實現埠掃描器
- ……
關於python可做的項目太多了,你可以按照自己喜歡的來進行開發練習,一定要做一些項目開發,光看是不行的,要動手才行啊!!
嗯,好像就這樣了,最後再分享一個python學習路徑吧,如果你實在不知道學哪些內容,可以按照這個路徑來學習:Python研發工程師
哦,對了,還有幾個整理的關於python的資源文章,可以看看:- Python學習資料與博客推薦
- [譯]學習Python編程的19個資源
- python機器學習入門資料梳理
以上,希望對題主能有所幫助……
有關Python學習,小編在此將《阿里巴巴技術協會-Python與設計模式系列課程》分享給各位同學:
0、Python與設計模式--前言:https://yq.aliyun.com/articles/70448
1、Python與設計模式--單例模式:https://yq.aliyun.com/articles/70418
2、Python與設計模式--工廠類相關模式:https://yq.aliyun.com/articles/70417
3、Python與設計模式--建造者模式:https://yq.aliyun.com/articles/70416
4、Python與設計模式--原型模式:https://yq.aliyun.com/articles/70451
5、Python與設計模式--代理模式:https://yq.aliyun.com/articles/70738
6、Python與設計模式--裝飾器模式:https://yq.aliyun.com/articles/70737
7、Python與設計模式--適配器模式:https://yq.aliyun.com/articles/70536
8、Python與設計模式--門面模式:https://yq.aliyun.com/articles/70532
9、Python與設計模式--組合模式:https://yq.aliyun.com/articles/70535
10、Python與設計模式--享元模式:https://yq.aliyun.com/articles/70529;
11、Python與設計模式--橋樑模式:https://yq.aliyun.com/articles/71072;
12、Python與設計模式--策略模式:https://yq.aliyun.com/articles/71071;
13、Python與設計模式--責任鏈模式:https://yq.aliyun.com/articles/71074;
14、Python與設計模式--命令模式:https://yq.aliyun.com/articles/71070;
15、Python與設計模式--中介者模式:https://yq.aliyun.com/articles/71073;
16、Python與設計模式--模板模式:https://yq.aliyun.com/articles/71069;
17、Python與設計模式--迭代器模式:https://yq.aliyun.com/articles/71068;
18、Python與設計模式--訪問者模式:https://yq.aliyun.com/articles/71075;
19、Python與設計模式--觀察者模式:https://yq.aliyun.com/articles/71066;
20、Python與設計模式--解釋器模式:https://yq.aliyun.com/articles/71065;
——————————————————————————————————
另外在實踐方面,這裡有三個爬取實踐內容推薦給樓主和各位小夥伴練練手:
1、[python爬蟲] Selenium定向爬取PubMed生物醫學摘要信息
文章地址:https://yq.aliyun.com/articles/26043
本文主要是自己的在線代碼筆記。在生物醫學本體Ontology構建過程中,我使用Selenium定向爬取生物醫學PubMed資料庫的內容。 PubMed是一個免費的搜尋引擎,提供生物醫學方面的論文搜尋以及摘要。
2、[python爬蟲] Selenium爬取新浪微博內容及用戶信息
文章地址:https://yq.aliyun.com/articles/26030
在進行自然語言處理、文本分類聚類、推薦系統、輿情分析等研究中,通常需要使用新浪微博的數據作為語料,這篇文章主要介紹如果使用Python和Selenium爬取自定義新浪微博語料。因為網上完整的語料比較少,而使用Selenium方法有點簡單、速度也比較慢,但方法可行,同時能夠輸入驗證碼。希望文章對你有所幫助~
3、[python爬蟲] Selenium定向爬取虎撲籃球海量精美圖片
文章地址:https://yq.aliyun.com/articles/26050
在進行自然語言處理、文本分類聚類、推薦系統、輿情分析等研究中,通常需要使用新浪微博的數據作為語料,這篇文章主要介紹如果使用Python和Selenium爬取自定義新浪微博語料。因為網上完整的語料比較少,而使用Selenium方法有點簡單、速度也比較慢,但方法可行,同時能夠輸入驗證碼。
我是自學的Python。從對Python一無所知,到在博客上寫Python相關的系列文章(Python快速教程),前後有將近三年的時間。期間有不少門檻,但也充滿樂趣。樂趣是自學的最大動力。Python是一個容易編寫,又功能強大的動態語言。使用Python,可以在短短几行內實現相當強大的功能。通過自己寫一些小程序,迅速的看到效果,發現問題,這是學習Python最便利的地方。在學習Python之前,可以了解一下Python的特點和設計理念(Python簡史)。在設計之初,Python就試圖在複雜、強大的C和方便、功能有限的bash之間,找到一個平衡點。Python的語法比較簡單,用起來很方便,因此有些人把它當作腳本語言使用。但Python要比普通的腳本語言功能強大很多。通過良好的可拓展性,Python的功能相當全面,應用面很廣:web伺服器,網路爬蟲,科學運算,機器學習,遊戲開發…… 當然,天下沒有免費的午餐,也沒有完美的語言,Python為了達到上述兩點,有意的犧牲了Python的運行速度。如果你是在編寫高業務量、運算量的程序,可能Python並不是最好的選擇。-----Python的主體內容大致可以分為以下幾個部分:面向過程。包括基本的表達式,if語句,循環,函數等。如果你有任何一個語言的基礎,特別是C語言的基礎,這一部分就是分分鐘了解下Python規定的事。如果你沒有語言基礎,建議從Python Programming為參考書。這本書是計算機導論性質的教材,不需要編程基礎。面向對象,包括面向對象的基本概念,類,方法,屬性,繼承等。Python是面向對象的語言,「一切皆對象」。面向對象是很難迴避的。Python的面向對象機制是相對比較鬆散的,不像Java和C++那麼嚴格。好處是容易學,容易維護,壞處是容易犯錯。應用功能,包括IO,數據容器如表和詞典,內置函數,模塊,格式化字元串等。這些在其它語言中也經常出現,有比較強的實用性。高級語法,上下文管理器,列表推導,函數式編程,裝飾器,特殊方法等。這些語法並不是必須的,你可以用前面比較基礎的語法實現。學這些高級語法的主要原因是:它們太方便了。比如列表推導一行可以做到的事情,用循環結構要好幾行才行。學習Python主體最好的參考書是Learning Python,它非常全面,滿滿的都是乾貨。雖然很厚,讀起來並不難讀。另一個是參考官網的教程Python.org-----Python號稱「Battery Included",也就是說,功能都已經包含在了語言中。這一自信,主要來自Python功能全面的標準庫。標準庫提供了許多功能模塊,每個模塊是某一方面功能的介面,比如文件管理,操作系統互動,字元處理,網路介面,編碼加密等等。The Python Standard Library中,你可以看到標準庫模塊的列表。這裡也是標準庫最好的學習資料。如果想找書,我只看到過兩本關於標準庫的:Python Essential ReferenceThe Python Standard Library by Example說實話,這兩本都不算很好的標準庫教材,而標準庫的參考書也確實很難寫。因為標準庫只是調用功能的介面,最終實現的是Python和系統的互動。這需要很強的系統知識,比如文件系統知識,進程管理,http原理,socket編程,資料庫原理…… 如果這些知識都已經準備充分,那麼標準庫學起來完全沒有難度。然而,這些背景知識的學習並非一朝一夕的事情。更深入的Python學習也是如此,需要大量的背景知識,而不是Python自身。如果你對Python的編譯和運行機制感興趣,你可以往Python底層這一深度挖。如果你對應用感興趣,你可以多學習幾個自己用的上的第三方包。學到這個時候,就是要自己探索的廣闊空間了。-----基本上,學過主體內容之後,Python還是要靠做項目來練習。有不少小練習題類型的資料,比如Python Cookbook。但更好的方式是自己去想一些應用場景,用Python來解決。Python功能全面,所以不要擔心自己想的問題Python解決不了 (基本上Python解決不了的問題,別的語言也沒戲)。比如我學習多線程的動力,就因為要並行的下載大量的文件。基本上一個項目下來,會用到Python好幾塊的內容,知識會特別鞏固。最後,和其它任何知識的學習一樣,筆記和總結很重要。在看參考書和看網頁時,可以做一些筆記。等到學了一段時間後,可以把筆記整理成更有條理的參考卡片(reference card),或者寫博客。這也是我寫「Python快速教程」的主要原因。
最後:
自己多問下為什麼學python
如果一門語言沒有改變你的編程思維,那麼它不值得你去學習」。如果這麼說,我們大學的時候,學習了c,c++,java,C#,算是值得學習么?很多時候是不值得,我覺得我們大學的課程就是用java,c#,c++把"C程序設計"又上了一遍.
這是因為,學校的老師會C和java之類的,所以要跟著規矩開這門課,(這也就是為什麼,許多學校還在教vb,),這也就是為什麼,你所以為的一樣就是大家都有For都有while,都有switch..都有Class...都有int 都有float,所謂的不一樣就是用C有指針,java沒有,這就是為什麼教育是失敗的,這也就是為什麼,我目前認識的幾個編程大牛
python的優點:簡單 我所說的簡單,是相比於象C和C++這樣的語言,你為了編程,要學習許多偏底層的東西.在比如,你在學習一個新的編程範式,或者想要馬上做個例子看看,試驗某個API,如果你是寫java的,你不得不去寫一個main,寫一些構造,即使有IDE這樣的東西,能夠為你帶來代碼生成器,而我做得就是寫一段「腳本」,或者打開python互動式解釋器就行了。
自己認識的python朋友出去工作,工資比較高,然後自己又剛剛好是會python所以選擇學習python,這樣的人比較危險但是也比較有激勵,還有就是覺得python比其他開發語言好用。
學完python前景會咋樣
其實我個人是很看好python未來的就業前景的,因為我認識太多的工程師都已經在學python,很多都是月收入大幾萬的
我個人也並非一直用python。前些年主要用c/c++以及java開發一些通信,移動系統,互聯網通信。近3年開始才轉向python。坦白的說,這可能與你相處的公司以及環境不大一樣。隨便舉個例子,google的protocol buffer協議一出來就具有c++/python/java三種語言支持。google的廣告系統早在03,04年左右就一併對python進行了webservice支持,大部分涉及基礎核心系統的公司,都開始對python進行了擴展支持。甚至開源社區的postgresql資料庫,除了自身的ansi SQL,pgsql,pg/TCL,PG/PERL之外對python進行了內嵌支持,唯獨卻沒有呼聲很高的java。在FREEBSD(MIT)/LINUX(GPL)平台上,對java可能排斥性比較大,但綜合而言,目前python發展還沒有java那種普及,主要是python大部分工作仍然是在較為深入地系統層和框架層做設計開發,例如django,SQLAlchemy,fail2ban,mail郵件系統,twisted等等。這部分對於那種習慣應用前輩們框架的編碼人員而言,缺乏創造力的他們根本無法適用這種開發。尤其在python涉及一些系統層面需要有較強的c/c++能力,這部分人在國內要麼就累得要死沒時間,要麼就啥都不會就會拷貝代碼,而國內公司也鮮有主動去做這部分基礎勞動的,大多都是等別人做好了在直接拿來用,所以造就了任何技術性的東西出來,國內都是先等等看,然後抄襲應用。
大環境如此,但千萬誤認為先等等看吧。對於一個技術人員而言,缺乏對新技術的渴望與熱情,這是一種非常危險的事情。我工作8年了,按照國內很多的人的說法早已不做代碼了,但又一次在聽一個老外的演講,他說他50多歲仍然每天堅持寫代碼,了解最新的動態,所以他才能做到他們公司的首席科學家,因此它才能時刻指導項目團隊前進並保證項目的質量。他坦言對於一個不寫代碼並且不了解最新的技術動態的技術人員或者技術團隊的負責人而言,這種團隊也就足夠做作小項目,一旦壓力和項目過大,就會有很多問題漏出來。
對於新人而言,無論學習什麼技術,都要以鼓勵的姿態出現。太多用薪水和你個人所看到的現狀去衡量一門技術,那絕對是欠缺眼光的。任何一門技術,一旦有人學習,他有可能逐漸成為這個領域的專家,即便再濫再沒有人用的開發語言技術,他也有可能就是明日的奠基者或者大師。
自己如何確定目標
在生活中學會不斷挖掘自己的潛力。我們都是一個普通人,可能並不清楚自己到底在哪方面佔有優勢。所以,學著在生活中找到自己的優勢,並根據優勢選擇一定的就業方向。
不隨波逐流。不要看周圍的人做什麼,自己就做什麼,也許別人做的並不適合你。別人的優勢很可能會成為你的劣勢。所以,堅定自己的想法,讓自己知道那些方面適合自己,自己可以勝任。
不斷嘗試可能成為自己的優勢。你不知道什麼適合自己,所以才要大膽、勇敢地嘗試。找到一種可以屬於你的獨特的優勢。
堅定信念。一旦你堅定了自己的信念,就不要被別人的意見或是諷刺或是嘲笑所干擾。別人不是你,不懂的你在想什麼,不清楚你開始這件事的源頭。你的事情,不了解你的人,沒有資格輕易評說。
不茫然,不多想。別讓太多的事干擾到你奮鬥下去的信念。夢想不容許太多的雜念。那些雜念只會讓你的心愈來愈脆弱,多為一個人考慮,到頭來,傷害的還是自己。
選擇自己學習方法
每個人都有適合自己的方法,有的人去選擇自學,有的人選擇看視頻學習,有的人選擇報名培訓班,那在這個時候,你就要自己考慮清楚,到底那樣對的幫助是最大的,個人覺得是跟著培訓班最好的,畢竟人家的實戰項目多,我們學軟體開發的都知道實戰項目對於學好一門語言是 很重要的。
學習python有那些誤區
具體裡面的誤區非常的多,那些就不需要我去寫出來,我給你說的一般都是心態的問題,首先一個覺得自己會java和c++,然後我學習python就很牛,但是你要知道語言是有很多相同的地方,但是不是通用,一定要自己學習的仔細。還有一種就是覺得我不會英語,我要先去把英語學習好在來學python。因為自己想還壞主意然後學習,這樣的都是容易找進誤區的。
怎麼樣才能學好python
學好python你需要一個良好的環境,一個優質的開發交流群,群里都是那種相互幫助的人才是可以的,我有建立一個python學習交流群,在群里我們相互幫助,相互關心,相互分享內容,這樣出問題幫助你的人就比較多,群號是304加上050最後799,這樣就可以找到大神聚合的群,如果你只願意別人幫助你,不願意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。
感覺寫的好,對你有幫助,就點個讚唄,別光只收藏哈.~( ̄▽ ̄)~
?
很多答主在回答這個問題的時候,都忽略了一點:題主的「學習」的終極目的是什麼?
程序語言說到底也是一種語言,比如你問:如何系統的學習法語?
你可能是想去法國留學生活;
你也可能是想成為以法語謀生,當翻譯;
你還可以想進法國的語言委員會,為某個新詞是不是進法語體系進行投票。
Python也一樣。其實大部分人問這個問題,就是想學python 基本語法,內置庫函數的基本用法和與自己專業相關的某一個或者幾個方面包的API用法罷了,比如Django, Numpy, Scipy等等。這個階段的用戶叫做Python User,想做一個熟練的User很容易,跟著上面任何一個高贊回答裡面推薦的書或者教程一路順下來,基本語法,內置庫函數就都掌握的基本夠用了,在實際工作中應用的庫,多查文檔,多用google和stackoverflow,沒什麼困難的,就是一句話「無他,唯手熟爾」。很多目前的Python developer的職位,其實本身只是Python user,因為他們也只是將Python作為一個工具應用到了網站,運維等等方面而已。這個時候你的核心競爭力不是Python,而是你對相關業務的理解能力。扔掉python,讓你學另外一門語言,給你一個類似的包,你還是大約的能做類似的事情的,只是順手不順手而已;但是這同時也是對你的限制,因為你也對和你業務相關的事情熟悉。大部分語言類教材,也就是教到這一步。
但是如果你不滿足於只是應用Python,而希望更進一步,那麼你會在工作中發現很多功能抽象出來可以應用到更廣泛的範圍,這個時候你就可以自己按照PEP的格式編寫package,並且對你工作中用的一些package提出Issue或者直接提交補丁。到這個階段,你可以說是一個Python package developer,因為你開始設計API給其他人用了,能夠識別好的API和需要改進的API,能夠編寫出你認為更好的實現……等等這些,這個時候,你對語言的應用已經算是非常熟練了,拋開你的相關業務不談,單靠Python的掌握你已經可以謀取一份和你專業不太相關的職業了,這個時候你就達到了職業程序員的水準——你的Python技能不依賴於你熟悉的業務的存在而存在。這個時候要看的教材,很多時候就不是和Python有直接關係了,而是和軟體工程有關。
如果你還不滿足,你對python本身感興趣,希望為python語言添磚加瓦,那麼你就需要不光精通python,至少還需要精通C,彙編最好也多少會一點,然後還需要了解編譯原理等一系列相關的知識,你需要加入python社區的maillist,積极參与大家的討論,從修改bug入手,漸漸的能夠提交feature,進而形成一套自己的程序理念,並且試圖用你的理念去和別人爭論和妥協,一點點的把你的理念,融入到Python的發展方向上。 這個時候,你才是真正可以說是Python 語言的Developer。這個階段的書往往非常有限,《Python源碼剖析》可能是一個不錯的開始。但是這個階段,書本已經不能幫助你太多了,你其實本質上是一個研究者,面前有廣闊的天地等著你自己去探索,然後整理成書發售。熟練掌握REPL和IDLE讓你隨時可以試驗語言功能,對初學者來說尤其重要,它們給學習者一個可以下手 — 更重要的,探索的地方。這是裝好python就有的工具。
熟悉了REPL以後,找一本可以幫你練習的書:
- Fluent Python:個人覺得組織得最精粹的書
- Python Playground:涵蓋python應用最廣,可能是最有趣的書
- Introducing Python: Modern Computing in Simple Packages
我不喜歡一上來就推薦一堆參考資料的東西,那隻會讓初學者更迷茫。好比一個嬰兒,你告訴他學會走路的方法有100種,他只會變的對走路毫無興趣,他要的只是一種最有效的學會走路的辦法,而不是100種。
同樣的,我下面介紹的是我之前剛開始自己學習python的1種方法,只需要1種就可以了。
第1步,基礎入門
很多人喜歡搞一本厚厚的書來看,雖然看完了但是還不會用Python,這是最大的悲哀。
傷心吧?難過吧?
其實,你只需要,看菜鳥教程網站的這個教程就足夠了,網站地址:
Python3 教程 | 菜鳥教程
如果你是剛開始學習編程的新手,沒看懂,多看幾次就會了。雖然這個過程會很乏味,但是對於你建立牢固的編程思維是必須的。
這一階段的輔助工具:
當你看到無法理解的代碼或者概念時,可以將代碼複製到下面這個網站,它會將你的代碼用圖形化的方式顯示出來,便於你理解:http://www.pythontutor.com/visualize.html#mode=edit
舉個例子,比如你在學習Ptyhon中的字典數據結構,但是不太理解這個概念,那麼你就可以將書中代碼輸入,然後點擊下面紅框匯中的按鈕。
就會運行處以下的圖形結果,對著圖形理解概念,不要太爽哦。
第2步:數據分析進階
上面第1步已經打好了Python編程的基礎,現在進入數據分析的學習階段。推薦一本書《利用Python進行數據分析》就夠了,這本書在豆瓣評分是8.5分。
如果你是懶的找電子版,可以在我的微信公眾號:猴子聊人物,中回復「資料」有電子版給你準備好了。(別叫我雷鋒,因為我就是啦)
看到書里涉及到到當統計概率知識看不懂的時候,這時候反過來再學習統計概率的知識。
很多人錯誤的學習方式是,先學習統計概率,再去學習數據分析編程工具(Excel,Python,R)。最後抱怨太難了,學不會。
這其實學習方法是錯誤的。這是為什麼呢?
有兩個原因:
1)因為很多統計概率講的都是複雜的數學公式,卻不講統計概率在生活中如何應用的。這樣造成的結果就是你學習了很多,但是也忘記了很多。
2)統計概率知識大多數時候是理論基礎,如果不結合數據分析工具(Excel,Python,R)來使用,你肯定學不會。
比如你學習了四分位數的理論,但是如何在實際中使用的,你不會數據分析的工具,你當然不會用了。
但是如果你會數據分析的工具,實際操作就一行代碼,四分位就計算出來了。你當然興奮了,一高興學習興趣也就上來了。
所以,我的建議,也是正確的學習方式是:先學習基礎的數據分析工具用法,當遇到統計概率知識的時候,再來補這個知識,邊學習邊用數據分析工具實現一遍。
這一階段的輔助工具:
如果你想通過做實際項目來學Ptyhon,可以試下《5 個適合 Python 初學者的編程項目》:
https://medium.com/learning-journalism-tech/five-mini-programming-projects-for-the-python-beginner-21492f6ce0f3
3. 數據分析高級-統計概率知識
統計概率知識學習其實很簡單,只是很多老師和書把這個東東講複雜了。學會下面圖中的知識,你就可以學會統計概率了:
簡單解釋下,上面的圖。
如果你的學習目的是:提高認知,將統計概率應用在生活中,用於指導你面對重大決策時做出最好的選擇,你的應該看《赤裸裸的統計學》這本書就夠了。
如果你的學習目的是:學習大數據的基礎知識:統計概率,希望成為數據分析師,實現升職加薪的目的,那你的學習參考書是《深入淺出統計學》或者《商務與經濟統計》。
《深入淺出統計學》適合沒有任何統計概率基礎的人學習,這本書足夠有趣和簡單。
如果你之前上學學習過一些統計概率的課,但是最後還是把課堂學的內容還給了老師,你應該選擇看《商務與經濟統計》這本書來重新鞏固你的基礎知識。
這些書的電子版也放到我的微信公眾號里了(對你就是這麼好,么么噠)
學會高級知識,你就不再是一個苦逼的搬磚了,而且會幫助你實現年薪增幅的目標。
4. 學習遇到困難,去哪找幫助?
只要是學習就會遇到困難,遇到困難怎麼辦呢?
1)首先,你需要使用某搜索引擎查找問題(你知道我說的不是百度),一般都能查到你問題的答案。學會用英文搜索真的很重要。
2)利用某搜索引擎查不到答案的話,當然是找前輩們幫忙了。不過問了不一定有人回復,為了解決這個問題,你可以留下你的問題,我看到會回復的。
3)最後記住,學習Ptyhon的目的,不是為了學一門編程語言而去學習一門編程語言,你的出發點應該是要完成什麼項目,帶著目標去學習。
題主的要求:系統、自學、零基礎,其實有些矛盾。
完全自學很難做到系統,而且系統地學法往往也不適合零基礎。
為什麼這麼說?大學的計算機課程設置就是很系統的,先從計算機導論學起,計算機組成原理、操作系統、離散數學、數據結構、演算法、編譯原理,看上去跟寫 Python 沒啥關係,卻是你日後漫長的開發之路上必不可少的基本功。
但是,如果你是零基礎、自學,且我猜測也不是計算機相關專業,那麼我覺得你這樣學,連半個月都堅持不下來。
如果你是個對編程感興趣,想要嘗試自學的人,那麼在一開始你更應該考慮的是如何先上車。在車上坐穩了,你有的是時間調整路線,去各條路上走一走看一看。
作為零基礎的新手,首先要解決的是,親自動手接觸下編程,對寫代碼有基本的認識,有了興趣,有了編程的思維,你才可能在這條路上『系統』地走下去。
即便是科班出身、以身示範告訴你應該從基礎學起的人,其實有不少都忽略了,他們最開始接觸編程的時刻並不是在大學系統學習的那個時間點,而是更早的某個時候,照著一些不知名教程就開始自己搗鼓計算機的時候。
所以,先上車,再問路。不用擔心走彎路,最後方向盤是在你手上。
關於如何上車,零基礎的人如何自學Python,我這個答案里已經說得很清楚,不再贅述:你是如何自學 Python 的?
自我推薦下專門面向零基礎入門的教程:Crossin的編程教室 - Python入門
與其糾結如何開始,不如花半個小時看一看,第一個程序就已經寫出來了。
想起孟岩多年前的一個文章,對於學習新語言,算是個通解。快速掌握一個語言最常用的50%
python的書太多了,如果不到實現那一層,我個人認為有基礎教程入門語法,有在線文檔都大致翻過一遍就很足夠了。如果要深入到實現,那麼 @藍色說的源碼剖析那個書不錯。
了解了基本語法以後,我認為最好的slide是這個,小而全,甜的糖都介紹了。Mike Pirnat: A Few of My Favorite (Python) Things
剩下就是囤庫,了解自己工作會用到的庫,這個是個逐漸的過程,因方向不同也就見仁見智了。網上找各種的小例子,讀懂加上適當的自己改造,慢慢自己摸出一套用法之後,再找本《python學習手冊》這類的大部頭讀一遍,再之後就可以讀源碼了。(官方文檔穿插在整個過程中,何時去讀都行)。
不過最重要的是自己去做一些東西(py學習手冊後面的習題也挺不錯的)。而且做的東西之中最好不要用第三方模塊,因為主要是為了熟悉Python自身的特性。當然也不用特意因為這個而畏懼第三方模塊,因為正式用的時候,還是調用第三方的多。但是第三方模塊成百上千,每個塊的功能都不一樣,等用到再看不遲。最最重要的還是實踐。
至於如何把程序寫的更好更像python而不是c/c++,那個屬於如何學好的階段,不過個人感覺有個方式就是多查有沒有現成的函數/模塊。
簡單來說, 學習python是非常有用的,下面分享一些學習python的一些書籍。沒有用你順著網線來打我。
首先介紹一些python入門類書籍
1, Python 入門指南
2,《從零開始學 Python》(第二版)
python進階類
Python 進階 - 北半球
參考類
Python 語言參考手冊
系統學習
Python 之旅
python學習附帶
Python 爬蟲學習系列教程
我覺得需要去學習python入門,上面的內容足夠,進階也能基本完成。
真正的學習是自己掌握融會貫通,而不是簡單地去看一些亂七八糟的書,也不是按照別人推薦的書來一遍囫圇吞棗。這隻能獲得自我的一個道德滿足感,對於真正地學習能夠起到的作用是微乎其微的。
怎樣才能融會貫通?我覺得應該去邊學習邊記筆記,記下自我的理解和學到的知識。然後去開拓,去創新,這樣學到的東西才能真正為我所用。
為什麼說高中階段可能是最努力的階段呢? 這不僅是高中階段我們耗費了大量的時間在書本上面,也因為我們有一些正確的方法。比如記筆記,比如大量重複,這樣的辦法雖然消耗時間,但它的效果是不可否認的。
因此,我建議大家可以在讀書的過程中記一些筆記,最好分門別類地記。然後重複,然後與他人溝通,確認自己的不足。從而在自己不足之處下功夫。
推薦一個好的學習和溝通的社區
北半球 - 一個開放的知識分享社區
這個裡面可以記筆記,可以寫書,可以分享和溝通。沒地方學習和溝通的可以來這裡,當然你有更好的地方當我沒說。哈哈哈
路過給我點個贊好嗎?不要嫖了我不給錢哦,當然給點小費我也樂意。
最後加個題外話,不想去看的朋友可以直接跳過去點贊哦。
The Zen of Python
這就是著名的《Python 之禪》。
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!
感謝 Guido van Rossum
Guido van Rossum 是值得所有 Pythoner 感謝和尊重的,因為他發明了這個優雅的編程語言。他發明 Python 的過程是那麼讓人稱讚和驚嘆,顯示出牛人的風采。
1989 年的聖誕節期間,吉多·范羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為 ABC 語言的一種繼承。之所以選中 Python 作為程序的名字,是因為他是一個蒙提·派森的飛行馬戲團的愛好者。ABC 是由吉多參加設計的一種教學語言。就吉多本人看來,ABC 這種語言非常優美和強大,是專門為非專業程序員設計的。但是 ABC 語言並沒有成功,究其原因,吉多認為是非開放造成的。吉多決心在 Python 中避免這一錯誤,並取得了非常好的效果,完美結合了 C 和其他一些語言。
這段故事的英文刊載在:https://www.python.org/doc/essays/foreword/
看到這裡,別忘了點贊哦。
核心教程入門,這是最好的
推薦閱讀:
※兩台絕頂聰明的電腦下棋對弈,誰會贏? 理由是什麼?
※哪些笑話只有程序員才能聽得懂?
※《計算機網路》這門課為何如此之難?
※你有哪些用計算機技能解決生活問題的經歷?
※為什麼十年前512M內存的電腦用得飛快,而現在4G的還不夠用?