路線框架

路線框架

https://www.zhihu.com/question/29138020html

https://docs.python.org/zh-cn/3/前端

https://www.liaoxuefeng.com/wiki/1016959663602400java

https://www.runoob.com/python3/python3-tutorial.htmlnode

http://www.pythontutor.com/visualize.html#mode=editpython

 

做者:桃花島主
連接:https://www.zhihu.com/question/29138020/answer/778840509
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

給初學者的幾個建議:mysql

  • Make English as your working language.
  • Practice makes perfect.
  • All experience comes from mistakes.
  • Don't be one of the leeches.
  • Either stand out or kicked out.

 


先附上github地址:nginx

https://github.com/jackfrued/Python-100-Day​github.com

 

下面是這個一百天計劃裏面的學習框架,我在這裏放上來。git

Day01~15 - Python語言基礎

Day01 - 初識Python

Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域程序員

搭建編程環境 - Windows環境 / Linux環境 / MacOS環境github

從終端運行Python程序 - Hello, world / print函數 / 運行程序

使用IDLE - 交互式環境(REPL) / 編寫多行代碼 / 運行程序 / 退出IDLE

註釋 - 註釋的做用 / 單行註釋 / 多行註釋

Day02 - 語言元素

程序和進制 - 指令和程序 / 馮諾依曼機 / 二進制和十進制 / 八進制和十六進制

變量和類型 - 變量的命名 / 變量的使用 / input函數 / 檢查變量類型 / 類型轉換

數字和字符串 - 整數 / 浮點數 / 複數 / 字符串 / 字符串基本操做 / 字符編碼

運算符 - 數學運算符 / 賦值運算符 / 比較運算符 / 邏輯運算符 / 身份運算符 / 運算符的優先級

應用案例 - 華氏溫度轉換成攝氏溫度 / 輸入圓的半徑計算周長和麪積 / 輸入年份判斷是不是閏年

Day03 - 分支結構

分支結構的應用場景 - 條件 / 縮進 / 代碼塊 / 流程圖

if語句 - 簡單的if / if-else結構 / if-elif-else結構 / 嵌套的if

應用案例 - 用戶身份驗證 / 英制單位與公制單位互換 / 擲骰子決定作什麼 / 百分制成績轉等級制 / 分段函數求值 / 輸入三條邊的長度若是能構成三角形就計算周長和麪積

Day04 - 循環結構

循環結構的應用場景 - 條件 / 縮進 / 代碼塊 / 流程圖

while循環 - 基本結構 / break語句 / continue語句

for循環 - 基本結構 / range類型 / 循環中的分支結構 / 嵌套的循環 / 提早結束程序

應用案例 - 1~100求和 / 判斷素數 / 猜數字遊戲 / 打印九九表 / 打印三角形圖案 / 猴子吃桃 / 百錢百雞

Day05 - 構造程序邏輯

基礎練習 - 水仙花數 / 完美數 / 五人分魚 / Fibonacci數列 / 迴文素數

綜合練習 - Craps賭博遊戲

Day06 - 函數和模塊的使用

函數的做用 - 代碼的壞味道 / 用函數封裝功能模塊

定義函數 - def語句 / 函數名 / 參數列表 / return語句 / 調用自定義函數

調用函數 - Python內置函數 / 導入模塊和函數

函數的參數 - 默認參數 / 可變參數 / 關鍵字參數 / 命名關鍵字參數

函數的返回值 - 沒有返回值 / 返回單個值 / 返回多個值

做用域問題 - 局部做用域 / 嵌套做用域 / 全局做用域 / 內置做用域 / 和做用域相關的關鍵字

用模塊管理函數 - 模塊的概念 / 用自定義模塊管理函數 / 命名衝突的時候會怎樣(同一個模塊和不一樣的模塊)

Day07 - 字符串和經常使用數據結構

字符串的使用 - 計算長度 / 下標運算 / 切片 / 經常使用方法

列表基本用法 - 定義列表 / 用下表訪問元素 / 下標越界 / 添加元素 / 刪除元素 / 修改元素 / 切片 / 循環遍歷

列表經常使用操做 - 鏈接 / 複製(複製元素和複製數組) / 長度 / 排序 / 倒轉 / 查找

生成列表 - 使用range建立數字列表 / 生成表達式 / 生成器

元組的使用 - 定義元組 / 使用元組中的值 / 修改元組變量 / 元組和列表轉換

集合基本用法 - 集合和列表的區別 / 建立集合 / 添加元素 / 刪除元素 / 清空

集合經常使用操做 - 交集 / 並集 / 差集 / 對稱差 / 子集 / 超集

字典的基本用法 - 字典的特色 / 建立字典 / 添加元素 / 刪除元素 / 取值 / 清空

字典經常使用操做 - keys()方法 / values()方法 / items()方法 / setdefault()方法

基礎練習 - 跑馬燈效果 / 列表找最大元素 / 統計考試成績的平均分 / Fibonacci數列 / 楊輝三角

綜合案例 - 雙色球選號 / 井字棋

Day08 - 面向對象編程基礎

類和對象 - 什麼是類 / 什麼是對象 / 面向對象其餘相關概念

定義類 - 基本結構 / 屬性和方法 / 構造器 / 析構器 / __str__方法

使用對象 - 建立對象 / 給對象發消息

面向對象的四大支柱 - 抽象 / 封裝 / 繼承 / 多態

基礎練習 - 定義學生類 / 定義時鐘類 / 定義圖形類 / 定義汽車類

Day09 - 面向對象進階

屬性 - 類屬性 / 實例屬性 / 屬性訪問器 / 屬性修改器 / 屬性刪除器 / 使用__slots__

類中的方法 - 實例方法 / 類方法 / 靜態方法

運算符重載 - __add__ / __sub__ / __or__ /__getitem__ / __setitem__ / __len__ / __repr__ / __gt__ / __lt__ / __le__ / __ge__ / __eq__ / __ne__ / __contains__

類(的對象)之間的關係 - 關聯 / 繼承 / 依賴

繼承和多態 - 什麼是繼承 / 繼承的語法 / 調用父類方法 / 方法重寫 / 類型斷定 / 多重繼承 / 菱形繼承(鑽石繼承)和C3算法

綜合案例 - 工資結算系統 / 圖書自動折扣系統 / 自定義分數類

Day10 - 圖形用戶界面和遊戲開發

使用tkinter開發GUI

使用pygame三方庫開發遊戲應用

「大球吃小球」遊戲

Day11 - 文件和異常
  • 讀文件 - 讀取整個文件 / 逐行讀取 / 文件路徑
  • 寫文件 - 覆蓋寫入 / 追加寫入 / 文本文件 / 二進制文件
  • 異常處理 - 異常機制的重要性 / try-except代碼塊 / else代碼塊 / finally代碼塊 / 內置異常類型 / 異常棧 / raise語句
  • 數據持久化 - CSV文件概述 / csv模塊的應用 / JSON數據格式 / json模塊的應用
Day12 - 字符串和正則表達式
  • 字符串高級操做 - 轉義字符 / 原始字符串 / 多行字符串 / in和 not in運算符 / is開頭的方法 / join和split方法 / strip相關方法 / pyperclip模塊 / 不變字符串和可變字符串 / StringIO的使用
  • 正則表達式入門 - 正則表達式的做用 / 元字符 / 轉義 / 量詞 / 分組 / 零寬斷言 /貪婪匹配與惰性匹配懶惰 / 使用re模塊實現正則表達式操做(匹配、搜索、替換、捕獲)
  • 使用正則表達式 - re模塊 / compile函數 / group和groups方法 / match方法 / search方法 / findall和finditer方法 / sub和subn方法 / split方法
  • 應用案例 - 使用正則表達式驗證輸入的字符串
Day13 - 進程和線程
  • 進程和線程的概念 - 什麼是進程 / 什麼是線程 / 多線程的應用場景
  • 使用進程 - fork函數 / multiprocessing模塊 / 進程池 / 進程間通訊
  • 使用線程 - thread模塊 / threading模塊 / Thread類 / Lock類 / Condition類 / 線程池
Day14 - 網絡編程入門和網絡應用開發
  • 計算機網絡基礎 - 計算機網絡發展史 / 「TCP-IP」模型 / IP地址 / 端口 / 協議 / 其餘相關概念
  • 網絡應用模式 - 「客戶端-服務器」模式 / 「瀏覽器-服務器」模式
  • 基於HTTP協議訪問網絡資源 - 網絡API概述 / 訪問URL / requests模塊 / 解析JSON格式數據
  • Python網絡編程 - 套接字的概念 / socket模塊 / socket函數 / 建立TCP服務器 / 建立TCP客戶端 / 建立UDP服務器 / 建立UDP客戶端 / SocketServer模塊
  • 電子郵件 - SMTP協議 / POP3協議 / IMAP協議 / smtplib模塊 / poplib模塊 / imaplib模塊
  • 短信服務 - 調用短信服務網關
Day15 - 圖像和文檔處理
  • 用Pillow處理圖片 - 圖片讀寫 / 圖片合成 / 幾何變換 / 色彩轉換 / 濾鏡效果
  • 讀寫Word文檔 - 文本內容的處理 / 段落 / 頁眉和頁腳 / 樣式的處理
  • 讀寫Excel文件 - xlrd模塊 / xlwt模塊
  • 生成PDF文件 - pypdf2模塊 / reportlab模塊

Day16~Day20 - Python語言進階

  • 經常使用數據結構
  • 函數的高級用法 - 「一等公民」 / 高階函數 / Lambda函數 / 做用域和閉包 / 裝飾器
  • 面向對象高級知識 - 「三大支柱」 / 類與類之間的關係 / 垃圾回收 / 魔術屬性和方法 / 混入 / 元類 / 面向對象設計原則 / GoF設計模式
  • 迭代器和生成器 - 相關魔術方法 / 建立生成器的兩種方式 /
  • 併發和異步編程 - 多線程 / 多進程 / 異步IO / async和await

Day21~30 - Web前端入門

  • 用HTML標籤承載頁面內容
  • 用CSS渲染頁面
  • 用JavaScript處理交互式行爲
  • jQuery入門和提升
  • Vue.js入門
  • Element的使用
  • Bootstrap的使用

Day31~35 - 玩轉Linux操做系統

  • 操做系統發展史和Linux概述
  • Linux基礎命令
  • Linux中的實用程序
  • Linux的文件系統
  • Vim編輯器的應用
  • 環境變量和Shell編程
  • 軟件的安裝和服務的配置
  • 網絡訪問和管理
  • 其餘相關內容

Day36~40 - 數據庫基礎和進階

  • 關係型數據庫MySQL
    • 關係型數據庫概述
    • MySQL的安裝和使用
    • SQL的使用
      • DDL - 數據定義語言 - create / drop / alter
      • DML - 數據操做語言 - insert / delete / update / select
      • DCL - 數據控制語言 - grant / revoke

 

  • 相關知識
    • 範式理論 - 設計二維表的指導思想
    • 數據完整性
    • 數據一致性

 

  • 在Python中操做MySQL

 

 

Day41~55 - 實戰Django

Day41 - 快速上手
  • Web應用工做原理和HTTP協議
  • Django框架概述
  • 5分鐘快速上手
  • 使用視圖模板
Day42 - 深刻模型
  • 關係型數據庫配置
  • 管理後臺的使用
  • 使用ORM完成對模型的CRUD操做
  • Django模型最佳實踐
  • 模型定義參考
Day43 - 靜態資源和Ajax請求
  • 加載靜態資源
  • 用Ajax請求獲取數據
Day44 - 表單的應用
  • 表單和表單控件
  • 跨站請求僞造和CSRF令牌
  • Form和ModelForm
  • 表單驗證
Day45 - Cookie和Session
  • 實現用戶跟蹤
  • cookie和session的關係
  • Django框架對session的支持
  • 視圖函數中的cookie讀寫操做
Day46 - 報表和日誌
  • 經過HttpResponse修改響應頭
  • 使用StreamingHttpResponse處理大文件
  • 使用xlwt生成Excel報表
  • 使用reportlab生成PDF報表
  • 使用ECharts生成前端圖表
  • 配置日誌和Django-Debug-Toolbar
Day47 - 中間件的應用
  • 什麼是中間件
  • Django框架內置的中間件
  • 自定義中間件及其應用場景
Day48 - 先後端分離開發入門
  • 返回JSON格式的數據
  • 用Vue.js渲染頁面
Day49 - RESTful架構和DRF入門
Day50 - RESTful架構和DRF進階
Day51 - 使用緩存
  • 網站優化第必定律
  • 在Django項目中使用Redis提供緩存服務
  • 在視圖函數中讀寫緩存
  • 使用裝飾器實現頁面緩存
  • 爲數據接口提供緩存服務
Day52 - 文件上傳和富文本編輯
  • 文件上傳表單控件和圖片文件預覽
  • 服務器端如何處理上傳的文件
  • 富文本編輯器概述
  • wangEditor的使用
Day53 - 短信和郵件
  • 經常使用短信網關平臺介紹
  • 使用螺絲帽發送短信
  • Django框架對郵件服務的支持
Day54 - 異步任務和定時任務
  • 網站優化第二定律
  • 配置消息隊列服務
  • 在項目中使用celery實現任務異步化
  • 在項目中使用celery實現定時任務
Day55 - 單元測試和項目上線
  • Python中的單元測試
  • Django框架對單元測試的支持
  • 使用版本控制系統
  • 配置和使用uWSGI
  • 動靜分離和Nginx配置
  • 配置HTTPS

Day56~60 - 實戰Flask

Day56 - Flask入門
Day57 - 模板的使用
Day58 - 表單的處理
Day59 - 數據庫操做
Day60 - 項目實戰

Day61~65 - 實戰Tornado

Day61 - 預備知識
  • 併發編程
  • I/O模式和事件驅動
Day62 - Tornado入門
  • Tornado概述
  • 5分鐘上手Tornado
  • 路由解析
  • 請求處理器
Day63 - 異步化
  • aiomysql和aioredis的使用
Day64 - WebSocket的應用
  • WebSocket簡介
  • WebSocket服務器端編程
  • WebSocket客戶端編程
  • 項目:Web聊天室
Day65 - 項目實戰
  • 先後端分離開發和接口文檔的撰寫
  • 使用Vue.js實現前端渲染
  • 使用ECharts實現報表功能
  • 使用WebSocket實現推送服務

Day66~75 - 爬蟲開發

Day66 - 網絡爬蟲和相關工具
  • 網絡爬蟲的概念及其應用領域
  • 網絡爬蟲的合法性探討
  • 開發網絡爬蟲的相關工具
  • 一個爬蟲程序的構成
Day67 - 數據採集和解析
  • 數據採集的標準和三方庫
  • 頁面解析的三種方式:正則表達式解析 / XPath解析 / CSS選擇器解析
Day68 - 存儲數據
  • 如何存儲海量數據
  • 實現數據的緩存
Day69 - 併發下載
  • 多線程和多進程
  • 異步I/O和協程
  • async和await關鍵字的使用
  • 三方庫aiohttp的應用
Day70 - 解析動態內容
  • JavaScript逆向工程
  • 使用Selenium獲取動態內容
Day71 - 表單交互和驗證碼處理
  • 自動提交表單
  • Cookie池的應用
  • 驗證碼處理
Day72 - Scrapy入門
  • Scrapy爬蟲框架概述
  • 安裝和使用Scrapy
Day73 - Scrapy高級應用
  • Spider的用法
  • 中間件的應用:下載中間件 / 蜘蛛中間件
  • Scrapy對接Selenium抓取動態內容
  • Scrapy部署到Docker
Day74 - Scrapy分佈式實現
  • 分佈式爬蟲的原理
  • Scrapy分佈式實現
  • 使用Scrapyd實現分佈式部署
Day75 - 爬蟲項目實戰
  • 爬取招聘網站數據
  • 爬取房地產行業數據
  • 爬取二手車交易平臺數據

Day76~90 - 數據處理和機器學習

Day76 - 機器學習基礎
Day77 - Pandas的應用
Day78 - NumPy和SciPy的應用
Day79 - Matplotlib和數據可視化
Day80 - k最近鄰(KNN)分類
Day81 - 決策樹
Day82 - 貝葉斯分類
Day83 - 支持向量機(SVM)
Day84 - K-均值聚類
Day85 - 迴歸分析
Day86 - 大數據分析入門
Day87 - 大數據分析進階
Day88 - Tensorflow入門
Day89 - Tensorflow實戰
Day90 - 推薦系統

Day91~100 - 團隊項目開發

第91天: 團隊項目開發準備
  1. 軟件過程模型
  • 經典過程模型(瀑布模型)
    • 可行性分析(研究作仍是不作),輸出《可行性分析報告》。
    • 需求分析(研究作什麼),輸出《需求規格說明書》和產品界面原型圖。
    • 概要設計和詳細設計,輸出概念模型圖、物理模型圖、類圖、時序圖等。
    • 編碼 / 測試。
    • 上線 / 維護。

 

  • 敏捷開發(Scrum)- 產品全部者、Scrum Master、研發人員 - Sprint
    • 產品的Backlog(用戶故事、產品原型)。
    • 計劃會議(評估和預算)。
    • 平常開發(站立會議、番茄工做法、結對編程、測試先行、代碼重構……)。
    • 修復bug(問題描述、重現步驟、測試人員、被指派人)。
    • 評審會議(Showcase)。
    • 回顧會議(當前週期作得好和很差的地方)。

補充:敏捷軟件開發宣言

  • 個體和互動 高於 流程和工具
  • 工做的軟件 高於 詳盡的文檔
  • 客戶合做 高於 合同談判
  • 響應變化 高於 遵循計劃

 

角色:產品全部者(決定作什麼,能對需求拍板的人)、團隊負責人(解決各類問題,專一如何更好的工做,屏蔽外部對開發團隊的影響)、開發團隊(項目執行人員,具體指開發人員和測試人員)。
準備工做:商業案例和資金、合同、憧憬、初始產品需求、初始發佈計劃、入股、組建團隊。
敏捷團隊一般人數爲8-10人。
工做量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,儘可能把每一個工做分解到最小任務量,最小任務量標準爲工做時間不能超過兩天,而後估算整體項目時間。把每一個任務都貼在白板上面,白板上分三部分:to do(待完成)、in progress(進行中)和done(已完成)。

 

  1. 項目團隊組建
  • 團隊的構成和角色
    說明:謝謝付祥英女士繪製了下面這張精美的公司組織架構圖。
  • 編程規範和代碼審查(flake八、pylint)
  • Python中的一些「慣例」(請參考《Python慣例-如何編寫Pythonic的代碼》
  • 影響代碼可讀性的緣由:
    • 代碼註釋太少或者沒有註釋
    • 代碼破壞了語言的最佳實踐
    • 反模式編程(意大利麪代碼、複製-黏貼編程、自負編程、……)

 

 

  1. 團隊開發工具介紹

請參考《團隊項目開發》

項目選題和理解業務

  1. 選題範圍設定
  • CMS(用戶端):新聞聚合網站、問答/分享社區、影評/書評網站等。
  • MIS(用戶端+管理端):KMS、KPI考覈系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
  • App後臺(管理端+數據接口):二手交易類、報刊雜誌類、小衆電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
  • 其餘類型:自身行業背景和工做經驗、業務容易理解和把控。

 

  1. 需求理解、模塊劃分和任務分配
  • 需求理解:頭腦風暴和競品分析。
  • 模塊劃分:畫思惟導圖(XMind),每一個模塊是一個枝節點,每一個具體的功能是一個葉節點(用動詞表述),須要確保每一個葉節點沒法再生出新節點,肯定每一個葉子節點的重要性、優先級和工做量。
  • 任務分配:由項目負責人根據上面的指標爲每一個團隊成員分配任務。
  1. 制定項目進度表(每日更新)

第92天:Docker的使用

第93天:數據庫設計和OOAD

概念模型和正向工程

  1. UML(統一建模語言)的類圖
  1. 經過模型建立表(正向工程)
    python manage.py makemigrations app python manage.py migrate

物理模型和反向工程

  1. PowerDesigner

2.經過數據表建立模型(反向工程)
python manage.py inspectdb > app/models.py

第94天: 網絡API接口設計
第95天: 使用Django開發項目

項目開發中的公共問題

  1. 數據庫的配置(多數據庫、主從複製、數據庫路由)
  2. 緩存的配置(分區緩存、鍵設置、超時設置、主從複製、故障恢復(哨兵))
  3. 日誌的配置
  4. 分析和調試(Django-Debug-ToolBar)
  5. 好用的Python模塊(日期計算、圖像處理、數據加密、三方API)

REST API設計

  1. RESTful架構

 

  1. API接口文檔的撰寫

 

  1. django-REST-framework的應用

項目中的重點難點剖析

  1. 使用緩存緩解數據庫壓力 - Redis
  2. 使用消息隊列作解耦合和削峯 - Celery + RabbitMQ

第96天:軟件測試和自動化測試

單元測試

  1. 測試的種類
  2. 編寫單元測試(unittest、pytest、nose二、tox、ddt、……)
  3. 測試覆蓋率(coverage)

項目部署

  1. 部署前的準備工做
  • 關鍵設置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 緩存 / 數據庫)
  • HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
  • 日誌相關配置

 

  1. Linux經常使用命令回顧
  2. Linux經常使用服務的安裝和配置
  3. uWSGI/Gunicorn和Nginx的使用
  • Gunicorn和uWSGI的比較
    • 對於不須要大量定製化的簡單應用程序,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的默認參數就已經可以適應大多數應用程序。
    • uWSGI支持異構部署。
    • 因爲Nginx自己支持uWSGI,在線上通常都將Nginx和uWSGI捆綁在一塊兒部署,並且uWSGI屬於功能齊全且高度定製的WSGI中間件。
    • 在性能上,Gunicorn和uWSGI其實表現至關。

 

 

  1. 虛擬化技術(Docker)

性能測試

  1. AB的使用
  2. SQLslap的使用
  3. sysbench的使用

自動化測試

  1. 使用Shell和Python進行自動化測試
  2. 使用Selenium實現自動化測試
  • Selenium IDE
  • Selenium WebDriver
  • Selenium Remote Control

 

  1. 測試工具Robot Framework介紹
第97天: 電商網站技術要點剖析
第98天: 項目部署上線和性能調優
  1. MySQL數據庫調優
  2. Web服務器性能優化

3.代碼性能調優

  • 多線程
  • 異步化

4.靜態資源訪問優化

  • 雲存儲
  • CDN
第99天: 面試中的公共問題
第100天: 英語面試

 

做者:駱昊 (jackfrued)

 

====================

筆記連接(基於Python 2.7):

筆記目錄:

 

=================

做者:彭貓
連接:https://www.zhihu.com/question/29138020/answer/72193349
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

力。

Python 的設計哲學之一就是 簡單易學,體如今兩個方面:
  1. 語法簡潔明瞭:相對 Ruby 和 Perl,它的語法特性很少很多,大多數都很簡單直接,不玩兒玄學。
  2. 切入點不少:Python 可讓你能夠作不少事情,科學計算和數據分析、爬蟲、Web 網站、遊戲、命令行實用工具等等等等,總有一個是你感興趣而且願意投入時間的。

廢話很少說,學會一門語言的捷徑只有一個: Getting Started

¶ 起步階段
任何一種編程語言都包含兩個部分:硬知識和軟知識,起步階段的主要任務是掌握硬知識。

°1 硬知識
「硬知識」指的是編程語言的語法、算法和數據結構、編程範式等,例如:變量和類型、循環語句、分支、函數、類。這部分知識也是具備普適性的,看上去是掌握了一種語法,實際是創建了一種思惟。例如:讓一個 Java 程序員去學習 Python,他能夠很快的將 Java 中的學到的面向對象的知識 map 到 Python 中來,所以可以快速掌握 Python 中面向對象的特性。

若是你是剛開始學習編程的新手,一本可靠的語法書是很是重要的。它看上去可能很是枯燥乏味,但對於創建穩固的編程思惟是必不可少。

下面列出了一些適合初學者入門的教學材料:

❖「笨方法學 Python」:
這本書在講解 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 的哲學:
用一種方法,最好是隻有一種方法來作一件事。

學習也是同樣,雖然推薦了多種學習資料,但實際學習的時候,最好只選擇其中的一個,堅持看完。

必要的時候,可能須要閱讀講解數據結構和算法的書,這些知識對於理解和使用 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 等等。在它們的源代碼中淘金,也是個不錯的選擇。

¶ 最後的話
每一個人學編程的道路都是不同的,其實大都異曲同工,沒有迷路的人只有不能堅持的人。雖然聽上去有點雞湯,可是這是事實。

 
=====================
做者:老楊
連接:https://www.zhihu.com/question/29138020/answer/394020225
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

1.第一 python入門基礎:這些都是基礎,基本概念必須清楚!

學習Python須要掌握以下基礎知識以及相關技能。
1.Python基礎知識(變量、語句、數據類型、數值類型、字符串、布爾類型、列表、字典、元組、條件語句、循環語句、函數、裝飾器、面向對象、網絡socket、爬蟲)
2.Python基礎庫(模塊、包、系統模塊、三方模塊)
3.python文件處理(讀、寫、執行、)
4.python字符統計
5.python數據排序

2.學習方法:萬虐終成神!敲代碼,解決BUG纔是學習,無數次的看視頻不是學習,至少不會學好。

只記Python基礎語法,卻沒什麼鳥用。就像幼兒園,老師在黑板上寫的‘肉’字,記住這個字咋寫,一筆一劃的記住,只須要半天,可是把這個詞和你平時吃的東西綁定,以致於後面你想到這個字,就流口水,須要平常的重複訓練。

同理:無方向的看書,看視頻也沒什麼用,其實能夠經過直接實戰來上手,好比:
文件操做
字符排序
網絡編程

錯誤的學習方法:
不少人在學習Python的時候經常會犯下面一種狀況:
買一本厚厚的編程指南,逼本身看完,記住每一個語法,閉門看書三個月,吃透一本書,最後一行代碼也寫不出來。

正確的學習方法:
編程就像騎自行車,買一本<<騎自行車大全>>是沒有什麼用的。
正確姿式:掌握最基礎的姿式,就能夠騎上車出發了,實際聯繫幾天,摔幾跤,基本就學會了。

3.自我進行測評:基礎門檻,不過須要找緣由並解決。

不少朋友反饋:Python基礎語法都學會了,但不知如何寫項目進階?
1.List,Dict特性滾瓜爛熟,就是沒法寫出實際的項目。
2.各類書籍也看,寫不出東西。
3.各類視頻也看,寫不出東西。
4.各類大會也去,名詞高大上,可是沒學到具體的技能。

對自我進行檢測:

1.給你一個字符串「come baby,python rocks!」 如何統計裏面字母o出現的次數!
思路:遍歷字符串,定義一個變量,每次o出現,都+1

2.給你一個字符串「come baby,python rocks!」 如何統計這裏面全部字母出現的次數!(普通變量確定沒法完成。)
思路:須要使用字典這類複雜的數據結構處理,字母當key,出現的次數當value,每一個key出現,對應的value+1

3.給你一個字符串「come baby,python rocks!」 如何統計這裏面字母出現次數的前三名!
思路:排序,取出前三

後續擴展練習:

1.給你一個字符串「come baby,python rocks!」 怎麼統計出現次數前三的字母。
2.一個nginx日誌文件,怎麼統計IP出現次數前三的url。
3.一個nginx日誌文件,統計IP出現前三後,如何存入MySQL數據庫。
4.存入MySQL中的日誌文件,如何輸出給瀏覽器端顯示。
5.如何美化前端表格等等。

4.重要學習部分:python庫怎麼學

模塊
將多個代碼塊(按功能)定義到同一個文件中。別的文件中使用時則先導入模塊,在調用模塊內變量或函數。
模塊命名要符合python變量的命名規範
1.建議全小寫英文字母和數字
2.避免與經常使用模塊或第三方模塊名稱衝突
控制模塊內代碼在使用python mod.py時執行,在導入時不執行
1.經過Global內變量__name__進行判斷
2.當以python mod.py運行腳本時__name__變量爲__main__字符串
3.當以模塊導入時__name__爲模塊名稱字符串


將不一樣模塊文件放在不一樣文件夾內,包文件夾下面須要有__init__.py文件用以聲明該文件爲Python包。
使用時須要從包內導入模塊後調用模塊中變量和函數。

經常使用系統模塊:

os,sys,time,datetime,urllib,xml,json,email,csv,collections,math,zipfile,trafile,hashlib
經常使用三方模塊:

requests,pyquery,django,flask,mysqlclient,paramiko,redis,lxml,dateutils,ipaddr,netaddr

模塊學習方法:

1.先知道有沒有
2.用的時候在查
內置工具:dir、help
搜索引擎:google、百度

5.再說一個python目前一個熱點:python Web應用(python全棧)

1.Python基礎入門(入門、數據類型、條件表達、循環語句)
2.Python基礎進階(文件操做、函數、裝飾器、模塊、面向對象、網絡編程)
3.Python前端知識(Html、Css、Js、Jquery、Bootstrap、)
4.Python高級用法(Django、Flask、數據庫操做、MVC、ORM、Admin、template)
5.Python項目實戰(電商項目、爬蟲項目、經常使用組件、運維項目、代碼調優)
6.Python高級進階(數據算法、代碼規範、面試技巧)

重要:多抄、多寫、多想、多問、多看、多聽、多說

1.學習編程就是爲了解決實際的問題,把本身在工做或學習中的重複工做程序化
2.谷歌和度娘
3.加入開源社區(多看、多分享、多交流)
4.參加培訓輔導(仔細聽課、跟上課堂學習,有問題作記錄,課後查閱資料或請求他人)
5.善於記錄筆記,不斷總結,查漏補缺。

6.python前景之一:大數據分析

1.python基礎入門(入門、數據類型、條件表達、循環語句)

2.python基礎進階(文件操做、函數、裝飾器、模塊、面向對象、網絡編程)

3.python數據採集:(外部數據源導入分析&爬蟲本身採集數據源分析)

4.數據分析:(各類庫,如Pandas庫,Numpy庫必備數據庫)

5.數據可視化:(matplotlib庫)

重要:實用便可,最具價值,切莫花哨不適用

7.python前景之二:機器學習

 

  • 直接看應用吧:看起來是個雲端的概念

1.計算機視覺

典型的應用包括:人臉識別、車牌識別、掃描文字識別、圖片內容識別、圖片搜索等等。

2.天然語言處理

典型的應用包括:搜索引擎智能匹配、文本內容理解、文本情緒判斷,語音識別、輸入法、機器翻譯等等。

3.社會網絡分析

典型的應用包括:用戶畫像、網絡關聯分析、欺詐做弊發現、熱點發現等等。

4.推薦

典型的應用包括:蝦米音樂的「歌曲推薦」,某寶的「猜你喜歡」等等。

 

  • 學習路線:
  1. 數學基礎:微積分、線性代數、機率與統計、典型算法

2.編程語言、工具和環境:python

python有着全品類的數據科學工具,從數據獲取、數據清洗到整合各類算法都作得很是全面。

  • 網頁爬蟲: scrapy
  • 數據挖掘:
    • pandas:模擬R,進行數據瀏覽與預處理。
    • numpy:數組運算。
    • scipy:高效的科學計算。
    • matplotlib:很是方便的數據可視化工具。
  • 機器學習:
    • scikit-learn:遠近聞名的機器學習package。未必是最高效的,可是接口真心封裝得好,幾乎全部的機器學習算法輸入輸出部分格式都一致。而它的支持文檔甚至能夠直接當作教程來學習,很是用心。對於不是很是高緯度、高量級的數據,scikit-learn勝任得很是好(有興趣能夠看看sklearn的源碼,也頗有意思)。
    • libsvm:高效率的svm模型實現(瞭解一下頗有好處,libsvm的係數數據輸入格式,在各處都很是常見)
    • keras/TensorFlow:對深度學習感興趣的同窗,也能很方便地搭建本身的神經網絡了。
  • 天然語言處理:
    • nltk:天然語言處理的相關功能作得很是全面,有典型語料庫,並且上手也很是容易。
  • 交互式環境:
    • ipython notebook:能直接打通數據到結果的通道,方便至極。強力推薦。

3.編程語言、工具和環境:R

R最大的優點是開源社區,彙集了很是多功能強大可直接使用的包,絕大多數的機器學習算法在R中都有完善的包可直接使用,同時文檔也很是齊全。常見的package包括:RGtk2, pmml, colorspace, ada, amap, arules, biclust, cba, descr, doBy, e1071, ellipse等等。另外,值得一提的是R的可視化效果作得很是不錯,而這對於機器學習是很是有幫助的。

4.其餘語言

相應資深程序員GG的要求,再補充一下Java和C++相關機器學習package。

  • Java系列
  • WEKA Machine Learning Workbench 至關於java中的scikit-learn
  • 其餘的工具如 Massive Online Analysis(MOA)、MEKA 、 Mallet等也很是有名。
  • C++系列
  • mlpack,高效同時可擴充性很是好的機器學習庫。
  • Shark:文檔齊全的老牌C++機器學習庫。
 
做者:老楊
連接:https://www.zhihu.com/question/29138020/answer/394020225
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

環境管理

管理 Python 版本和環境的工具

  • p:很是簡單的交互式 python 版本管理工具。官網
  • pyenv:簡單的 Python 版本管理工具。官網
  • Vex:能夠在虛擬環境中執行命令。官網
  • virtualenv:建立獨立 Python 環境的工具。官網
  • virtualenvwrapper:virtualenv 的一組擴展。官網

包管理

管理包和依賴的工具。

  • pip:Python 包和依賴關係管理工具。官網
  • pip-tools:保證 Python 包依賴關係更新的一組工具。官網
  • conda:跨平臺,Python 二進制包管理工具。官網
  • Curdling:管理 Python 包的命令行工具。官網
  • wheel:Python 分發的新標準,意在取代 eggs。官網

包倉庫

本地 PyPI 倉庫服務和代理。

 

  • devpi:PyPI 服務和打包/測試/分發工具。官網
  • localshop:本地 PyPI 服務(自定義包而且自動對 PyPI 鏡像)。官網

分發

打包爲可執行文件以便分發。

  • PyInstaller:將 Python 程序轉換成獨立的執行文件(跨平臺)。官網
  • dh-virtualenv:構建並將 virtualenv 虛擬環境做爲一個 Debian 包來發布。官網
  • Nuitka:將腳本、模塊、包編譯成可執行文件或擴展模塊。官網
  • py2app:將 Python 腳本變爲獨立軟件包(Mac OS X)。官網
  • py2exe:將 Python 腳本變爲獨立軟件包(Windows)。官網
  • pynsist:一個用來建立 Windows 安裝程序的工具,能夠在安裝程序中打包 Python自己。官網

構建工具

將源碼編譯成軟件。

  • buildout:一個構建系統,從多個組件來建立,組裝和部署應用。官網
  • BitBake:針對嵌入式 Linux 的相似 make 的構建工具。官網
  • fabricate:對任何語言自動找到依賴關係的構建工具。官網
  • PlatformIO:多平臺命令行構建工具。官網
  • PyBuilder:純 Python 實現的持續化構建工具。官網
  • SCons:軟件構建工具。官網

交互式解析器

交互式 Python 解析器。

  • IPython:功能豐富的工具,很是有效的使用交互式 Python。官網
  • bpython:界面豐富的 Python 解析器。官網
  • ptpython:高級交互式Python解析器, 構建於python-prompt-toolkit 之上。官網

文件

文件管理和 MIME(多用途的網際郵件擴充協議)類型檢測。

  • imghdr:(Python 標準庫)檢測圖片類型。官網
  • mimetypes:(Python 標準庫)將文件名映射爲 MIME 類型。官網
  • path.py:對 os.path 進行封裝的模塊。官網
  • pathlib:(Python3.4+ 標準庫)跨平臺的、面向對象的路徑操做庫。官網
  • python-magic:文件類型檢測的第三方庫 libmagic 的 Python 接口。官網
  • Unipath:用面向對象的方式操做文件和目錄。官網
  • watchdog:管理文件系統事件的 API 和 shell 工具官網
 

============ End

相關文章
相關標籤/搜索