感謝做者分享-http://bjbsair.com/2020-04-07/tech-info/30738.htmlhtml
若是你仍是迷茫到底如何系統的學習Python,不要緊!前端
爲你們整理了Python100天重新手到大師的系統學習教程,讓你不用再糾結,必定能幫助到你的問題。python
包括從基礎的Python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。送給正在學習Python的小夥伴!『內容較長,建議能夠先添加收藏,關注轉發就更開心了』mysql
ps:『儘管本文是簡述100天重新手到大師的每個階段學習內容已然篇幅不短,爲了你們方便學習,給你們準備了相對應的學習文檔跟各階段的python視頻/資料, 即見文末,如今咱們仍是言歸正傳*開始』web
Python應用領域和就業形勢分析
簡單的說,Python是一個「優雅」、「明確」、「簡單」的編程語言。面試
- 學習曲線低,非專業人士也能上手
- 開源系統,擁有強大的生態圈
- 解釋型語言,完美的平臺可移植性
- 支持面向對象和函數式編程
- 可以經過調用C/C++代碼擴展功能
- 代碼規範程度高,可讀性強
目前幾個比較流行的領域,Python都有用武之地。正則表達式
- 雲基礎設施 - Python / Java / Go
- DevOps - Python / Shell / Ruby / Go
- 網絡爬蟲 - Python / PHP / C++
- 數據分析挖掘 - Python / R / Scala / Matlab
- 機器學習 - Python / R / Java / Lisp
做爲一名Python開發者,主要的就業領域包括:redis
- Python服務器後臺開發 / 遊戲服務器開發 / 數據接口開發工程師
- Python自動化運維工程師
- Python數據分析 / 數據可視化 / 大數據工程師
- Python爬蟲工程師
- Python聊天機器人開發 / 圖像識別和視覺算法 / 深度學習工程師
下圖顯示了主要城市Python招聘需求量及薪資待遇排行榜(截止到2018年5月)。算法
給初學者的幾個建議:sql
- Make English as your working language.(讓英語成爲你的工做語言)
- Practice makes perfect.(熟能生巧)
- All experience comes from mistakes.(全部的經驗都源於你犯過的錯誤)
- Don't be one of the leeches.(不要當伸手黨)
- Either outstanding or out.(要麼出衆,要麼出局)
Day01~15 - Python語言基礎
Day01 - 初識Python
- Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域
- 搭建編程環境 - Windows環境 / Linux環境 / MacOS環境
- 從終端運行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 - 構造程序邏輯
- 經典案例:水仙花數 / 百錢百雞 / 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
-
範式理論 - 設計二維表的指導思想
-
數據完整性
-
數據一致性
-
DDL - 數據定義語言 - create / drop / alter
-
DML - 數據操做語言 - insert / delete / update / select
-
DCL - 數據控制語言 - grant / revoke
-
關係型數據庫概述
-
MySQL的安裝和使用
-
SQL的使用
-
相關知識
-
在Python中操做MySQL
-
NoSQL入門
-
NoSQL概述
-
Redis概述
-
Mongo概述
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 - 數據分析和機器學習
舒適提示:數據分析和機器學習的內容在code文件夾中,是用jupyter notebook書寫的代碼和筆記,須要先啓動jupyter notebook再打開對應的文件進行學習。
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.軟件過程模型
經典過程模型(瀑布模型)
- 可行性分析(研究作仍是不作),輸出《可行性分析報告》。
- 需求分析(研究作什麼),輸出《需求規格說明書》和產品界面原型圖。
- 概要設計和詳細設計,輸出概念模型圖(ER圖)、物理模型圖、類圖、時序圖等。
- 編碼 / 測試。
- 上線 / 維護。
瀑布模型最大的缺點是沒法擁抱需求變化,整套流程結束後才能看到產品,團隊士氣低落。
敏捷開發(Scrum)- 產品全部者、Scrum Master、研發人員 - Sprint
- 產品的Backlog(用戶故事、產品原型)。
- 計劃會議(評估和預算)。
- 平常開發(站立會議、番茄工做法、結對編程、測試先行、代碼重構……)。
- 修復bug(問題描述、重現步驟、測試人員、被指派人)。
- 發佈版本。
- 評審會議(Showcase,用戶須要參與)。
- 回顧會議(對當前迭代週期作一個總結)。
補充:敏捷軟件開發宣言
個體和互動 高於 流程和工具
工做的軟件 高於 詳盡的文檔
客戶合做 高於 合同談判
響應變化 高於 遵循計劃
角色:產品全部者(決定作什麼,能對需求拍板的人)、團隊負責人(解決各類問題,專一如何更好的工做,屏蔽外部對開發團隊的影響)、開發團隊(項目執行人員,具體指開發人員和測試人員)。
準備工做:商業案例和資金、合同、憧憬、初始產品需求、初始發佈計劃、入股、組建團隊。
敏捷團隊一般人數爲8-10人。
工做量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,儘可能把每一個工做分解到最小任務量,最小任務量標準爲工做時間不能超過兩天,而後估算整體項目時間。把每一個任務都貼在看板上面,看板上分三部分:to do(待完成)、in progress(進行中)和done(已完成)。
2.項目團隊組建
團隊的構成和角色
編程規範和代碼審查(flake八、pylint)
Python中的一些「慣例」(請參考《Python慣例-如何編寫Pythonic的代碼》)
影響代碼可讀性的緣由:
- 代碼註釋太少或者沒有註釋
- 代碼破壞了語言的最佳實踐
- 反模式編程(意大利麪代碼、複製-黏貼編程、自負編程、……)
項目選題和理解業務
1.選題範圍設定
- CMS(用戶端):新聞聚合網站、問答/分享社區、影評/書評網站等。
- MIS(用戶端+管理端):KMS、KPI考覈系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
- App後臺(管理端+數據接口):二手交易類、報刊雜誌類、小衆電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
- 其餘類型:自身行業背景和工做經驗、業務容易理解和把控。
- 2.需求理解、模塊劃分和任務分配
- 需求理解:頭腦風暴和競品分析。
- 模塊劃分:畫思惟導圖(XMind),每一個模塊是一個枝節點,每一個具體的功能是一個葉節點(用動詞表述),須要確保每一個葉節點沒法再生出新節點,肯定每一個葉子節點的重要性、優先級和工做量。
- 任務分配:由項目負責人根據上面的指標爲每一個團隊成員分配任務。
3.制定項目進度表
4.OOAD和數據庫設計
- UML(統一建模語言)的類圖
- 經過模型建立表(正向工程)
python manage.py makemigrations app
python manage.py migrate
- 使用PowerDesigner繪製物理模型圖。
- 經過數據表建立模型(反向工程)
python manage.py inspectdb > app/models.py
第92天:Docker容器詳解
- Docker簡介
- 安裝Docker
- 使用Docker建立容器(Nginx、MySQL、Redis、Gitlab、Jenkins)
- 構建Docker鏡像(Dockerfile的編寫和相關指令)
- 容器編排(Docker-compose)
- 集羣管理(Kubernetes)
第93天:MySQL性能優化
第94天:網絡API接口設計
第95天:[使用Django開發商業項目](./Day91-100/95.使用Django開發商業項 目.md)
項目開發中的公共問題
- 數據庫的配置(多數據庫、主從複製、數據庫路由)
- 緩存的配置(分區緩存、鍵設置、超時設置、主從複製、故障恢復(哨兵))
- 日誌的配置
- 分析和調試(Django-Debug-ToolBar)
- 好用的Python模塊(日期計算、圖像處理、數據加密、三方API)
REST API設計
- RESTful架構
- 理解RESTful架構
- RESTful API設計指南
- RESTful API最佳實踐
- API接口文檔的撰寫
- RAP2
- YAPI
- django-REST-framework的應用
項目中的重點難點剖析
- 使用緩存緩解數據庫壓力 - Redis
- 使用消息隊列作解耦合和削峯 - Celery + RabbitMQ
第96天:軟件測試和自動化測試
單元測試
- 測試的種類
- 編寫單元測試(unittest、pytest、nose二、tox、ddt、……)
- 測試覆蓋率(coverage)
項目部署
- 部署前的準備工做
- 關鍵設置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 緩存 / 數據庫)
- HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
- 日誌相關配置
- Linux經常使用命令回顧
- Linux經常使用服務的安裝和配置
- uWSGI/Gunicorn和Nginx的使用
- 對於不須要大量定製化的簡單應用程序,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的默認參數就已經可以適應大多數應用程序。
- uWSGI支持異構部署。
- 因爲Nginx自己支持uWSGI,在線上通常都將Nginx和uWSGI捆綁在一塊兒部署,並且uWSGI屬於功能齊全且高度定製的WSGI中間件。
- 在性能上,Gunicorn和uWSGI其實表現至關。
- Gunicorn和uWSGI的比較
- 使用虛擬化技術(Docker)部署測試環境和生產環境
性能測試
- AB的使用
- SQLslap的使用
- sysbench的使用
自動化測試
- 使用Shell和Python進行自動化測試
- 使用Selenium實現自動化測試
- Selenium IDE
- Selenium WebDriver
- Selenium Remote Control
- 測試工具Robot Framework介紹
第97天:電商網站技術要點剖析
第98天:項目部署上線和性能調優
- MySQL數據庫調優
- Web服務器性能優化
- Nginx負載均衡配置
- Keepalived實現高可用
- 代碼性能調優
- 多線程
- 異步化
- 靜態資源訪問優化
- 雲存儲
- CDN
第99天:面試中的公共問題
第100天:Python面試題集
感謝做者分享-http://bjbsair.com/2020-04-07/tech-info/30738.html
若是你仍是迷茫到底如何系統的學習Python,不要緊!
爲你們整理了Python100天重新手到大師的系統學習教程,讓你不用再糾結,必定能幫助到你的問題。
包括從基礎的Python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。送給正在學習Python的小夥伴!『內容較長,建議能夠先添加收藏,關注轉發就更開心了』
ps:『儘管本文是簡述100天重新手到大師的每個階段學習內容已然篇幅不短,爲了你們方便學習,給你們準備了相對應的學習文檔跟各階段的python視頻/資料, 即見文末,如今咱們仍是言歸正傳*開始』
Python應用領域和就業形勢分析
簡單的說,Python是一個「優雅」、「明確」、「簡單」的編程語言。
- 學習曲線低,非專業人士也能上手
- 開源系統,擁有強大的生態圈
- 解釋型語言,完美的平臺可移植性
- 支持面向對象和函數式編程
- 可以經過調用C/C++代碼擴展功能
- 代碼規範程度高,可讀性強
目前幾個比較流行的領域,Python都有用武之地。
- 雲基礎設施 - Python / Java / Go
- DevOps - Python / Shell / Ruby / Go
- 網絡爬蟲 - Python / PHP / C++
- 數據分析挖掘 - Python / R / Scala / Matlab
- 機器學習 - Python / R / Java / Lisp
做爲一名Python開發者,主要的就業領域包括:
- Python服務器後臺開發 / 遊戲服務器開發 / 數據接口開發工程師
- Python自動化運維工程師
- Python數據分析 / 數據可視化 / 大數據工程師
- Python爬蟲工程師
- Python聊天機器人開發 / 圖像識別和視覺算法 / 深度學習工程師
下圖顯示了主要城市Python招聘需求量及薪資待遇排行榜(截止到2018年5月)。
給初學者的幾個建議:
- Make English as your working language.(讓英語成爲你的工做語言)
- Practice makes perfect.(熟能生巧)
- All experience comes from mistakes.(全部的經驗都源於你犯過的錯誤)
- Don't be one of the leeches.(不要當伸手黨)
- Either outstanding or out.(要麼出衆,要麼出局)
Day01~15 - Python語言基礎
Day01 - 初識Python
- Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域
- 搭建編程環境 - Windows環境 / Linux環境 / MacOS環境
- 從終端運行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 - 構造程序邏輯
- 經典案例:水仙花數 / 百錢百雞 / 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
-
範式理論 - 設計二維表的指導思想
-
數據完整性
-
數據一致性
-
DDL - 數據定義語言 - create / drop / alter
-
DML - 數據操做語言 - insert / delete / update / select
-
DCL - 數據控制語言 - grant / revoke
-
關係型數據庫概述
-
MySQL的安裝和使用
-
SQL的使用
-
相關知識
-
在Python中操做MySQL
-
NoSQL入門
-
NoSQL概述
-
Redis概述
-
Mongo概述
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 - 數據分析和機器學習
舒適提示:數據分析和機器學習的內容在code文件夾中,是用jupyter notebook書寫的代碼和筆記,須要先啓動jupyter notebook再打開對應的文件進行學習。
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.軟件過程模型
經典過程模型(瀑布模型)
- 可行性分析(研究作仍是不作),輸出《可行性分析報告》。
- 需求分析(研究作什麼),輸出《需求規格說明書》和產品界面原型圖。
- 概要設計和詳細設計,輸出概念模型圖(ER圖)、物理模型圖、類圖、時序圖等。
- 編碼 / 測試。
- 上線 / 維護。
瀑布模型最大的缺點是沒法擁抱需求變化,整套流程結束後才能看到產品,團隊士氣低落。
敏捷開發(Scrum)- 產品全部者、Scrum Master、研發人員 - Sprint
- 產品的Backlog(用戶故事、產品原型)。
- 計劃會議(評估和預算)。
- 平常開發(站立會議、番茄工做法、結對編程、測試先行、代碼重構……)。
- 修復bug(問題描述、重現步驟、測試人員、被指派人)。
- 發佈版本。
- 評審會議(Showcase,用戶須要參與)。
- 回顧會議(對當前迭代週期作一個總結)。
補充:敏捷軟件開發宣言
個體和互動 高於 流程和工具
工做的軟件 高於 詳盡的文檔
客戶合做 高於 合同談判
響應變化 高於 遵循計劃
角色:產品全部者(決定作什麼,能對需求拍板的人)、團隊負責人(解決各類問題,專一如何更好的工做,屏蔽外部對開發團隊的影響)、開發團隊(項目執行人員,具體指開發人員和測試人員)。
準備工做:商業案例和資金、合同、憧憬、初始產品需求、初始發佈計劃、入股、組建團隊。
敏捷團隊一般人數爲8-10人。
工做量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,儘可能把每一個工做分解到最小任務量,最小任務量標準爲工做時間不能超過兩天,而後估算整體項目時間。把每一個任務都貼在看板上面,看板上分三部分:to do(待完成)、in progress(進行中)和done(已完成)。
2.項目團隊組建
團隊的構成和角色
編程規範和代碼審查(flake八、pylint)
Python中的一些「慣例」(請參考《Python慣例-如何編寫Pythonic的代碼》)
影響代碼可讀性的緣由:
- 代碼註釋太少或者沒有註釋
- 代碼破壞了語言的最佳實踐
- 反模式編程(意大利麪代碼、複製-黏貼編程、自負編程、……)
項目選題和理解業務
1.選題範圍設定
- CMS(用戶端):新聞聚合網站、問答/分享社區、影評/書評網站等。
- MIS(用戶端+管理端):KMS、KPI考覈系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
- App後臺(管理端+數據接口):二手交易類、報刊雜誌類、小衆電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
- 其餘類型:自身行業背景和工做經驗、業務容易理解和把控。
- 2.需求理解、模塊劃分和任務分配
- 需求理解:頭腦風暴和競品分析。
- 模塊劃分:畫思惟導圖(XMind),每一個模塊是一個枝節點,每一個具體的功能是一個葉節點(用動詞表述),須要確保每一個葉節點沒法再生出新節點,肯定每一個葉子節點的重要性、優先級和工做量。
- 任務分配:由項目負責人根據上面的指標爲每一個團隊成員分配任務。
3.制定項目進度表
4.OOAD和數據庫設計
- UML(統一建模語言)的類圖
- 經過模型建立表(正向工程)
python manage.py makemigrations app
python manage.py migrate
- 使用PowerDesigner繪製物理模型圖。
- 經過數據表建立模型(反向工程)
python manage.py inspectdb > app/models.py
第92天:Docker容器詳解
- Docker簡介
- 安裝Docker
- 使用Docker建立容器(Nginx、MySQL、Redis、Gitlab、Jenkins)
- 構建Docker鏡像(Dockerfile的編寫和相關指令)
- 容器編排(Docker-compose)
- 集羣管理(Kubernetes)
第93天:MySQL性能優化
第94天:網絡API接口設計
第95天:[使用Django開發商業項目](./Day91-100/95.使用Django開發商業項 目.md)
項目開發中的公共問題
- 數據庫的配置(多數據庫、主從複製、數據庫路由)
- 緩存的配置(分區緩存、鍵設置、超時設置、主從複製、故障恢復(哨兵))
- 日誌的配置
- 分析和調試(Django-Debug-ToolBar)
- 好用的Python模塊(日期計算、圖像處理、數據加密、三方API)
REST API設計
- RESTful架構
- 理解RESTful架構
- RESTful API設計指南
- RESTful API最佳實踐
- API接口文檔的撰寫
- RAP2
- YAPI
- django-REST-framework的應用
項目中的重點難點剖析
- 使用緩存緩解數據庫壓力 - Redis
- 使用消息隊列作解耦合和削峯 - Celery + RabbitMQ
第96天:軟件測試和自動化測試
單元測試
- 測試的種類
- 編寫單元測試(unittest、pytest、nose二、tox、ddt、……)
- 測試覆蓋率(coverage)
項目部署
- 部署前的準備工做
- 關鍵設置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 緩存 / 數據庫)
- HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
- 日誌相關配置
- Linux經常使用命令回顧
- Linux經常使用服務的安裝和配置
- uWSGI/Gunicorn和Nginx的使用
- 對於不須要大量定製化的簡單應用程序,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的默認參數就已經可以適應大多數應用程序。
- uWSGI支持異構部署。
- 因爲Nginx自己支持uWSGI,在線上通常都將Nginx和uWSGI捆綁在一塊兒部署,並且uWSGI屬於功能齊全且高度定製的WSGI中間件。
- 在性能上,Gunicorn和uWSGI其實表現至關。
- Gunicorn和uWSGI的比較
- 使用虛擬化技術(Docker)部署測試環境和生產環境
性能測試
- AB的使用
- SQLslap的使用
- sysbench的使用
自動化測試
- 使用Shell和Python進行自動化測試
- 使用Selenium實現自動化測試
- Selenium IDE
- Selenium WebDriver
- Selenium Remote Control
- 測試工具Robot Framework介紹
第97天:電商網站技術要點剖析
第98天:項目部署上線和性能調優
- MySQL數據庫調優
- Web服務器性能優化
- Nginx負載均衡配置
- Keepalived實現高可用
- 代碼性能調優
- 多線程
- 異步化
- 靜態資源訪問優化
- 雲存儲
- CDN
第99天:面試中的公共問題
第100天:Python面試題集
感謝做者分享-http://bjbsair.com/2020-04-07/tech-info/30738.html
若是你仍是迷茫到底如何系統的學習Python,不要緊!
爲你們整理了Python100天重新手到大師的系統學習教程,讓你不用再糾結,必定能幫助到你的問題。
包括從基礎的Python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。送給正在學習Python的小夥伴!『內容較長,建議能夠先添加收藏,關注轉發就更開心了』
ps:『儘管本文是簡述100天重新手到大師的每個階段學習內容已然篇幅不短,爲了你們方便學習,給你們準備了相對應的學習文檔跟各階段的python視頻/資料, 即見文末,如今咱們仍是言歸正傳*開始』
Python應用領域和就業形勢分析
簡單的說,Python是一個「優雅」、「明確」、「簡單」的編程語言。
- 學習曲線低,非專業人士也能上手
- 開源系統,擁有強大的生態圈
- 解釋型語言,完美的平臺可移植性
- 支持面向對象和函數式編程
- 可以經過調用C/C++代碼擴展功能
- 代碼規範程度高,可讀性強
目前幾個比較流行的領域,Python都有用武之地。
- 雲基礎設施 - Python / Java / Go
- DevOps - Python / Shell / Ruby / Go
- 網絡爬蟲 - Python / PHP / C++
- 數據分析挖掘 - Python / R / Scala / Matlab
- 機器學習 - Python / R / Java / Lisp
做爲一名Python開發者,主要的就業領域包括:
- Python服務器後臺開發 / 遊戲服務器開發 / 數據接口開發工程師
- Python自動化運維工程師
- Python數據分析 / 數據可視化 / 大數據工程師
- Python爬蟲工程師
- Python聊天機器人開發 / 圖像識別和視覺算法 / 深度學習工程師
下圖顯示了主要城市Python招聘需求量及薪資待遇排行榜(截止到2018年5月)。
給初學者的幾個建議:
- Make English as your working language.(讓英語成爲你的工做語言)
- Practice makes perfect.(熟能生巧)
- All experience comes from mistakes.(全部的經驗都源於你犯過的錯誤)
- Don't be one of the leeches.(不要當伸手黨)
- Either outstanding or out.(要麼出衆,要麼出局)
Day01~15 - Python語言基礎
Day01 - 初識Python
- Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域
- 搭建編程環境 - Windows環境 / Linux環境 / MacOS環境
- 從終端運行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 - 構造程序邏輯
- 經典案例:水仙花數 / 百錢百雞 / 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
-
範式理論 - 設計二維表的指導思想
-
數據完整性
-
數據一致性
-
DDL - 數據定義語言 - create / drop / alter
-
DML - 數據操做語言 - insert / delete / update / select
-
DCL - 數據控制語言 - grant / revoke
-
關係型數據庫概述
-
MySQL的安裝和使用
-
SQL的使用
-
相關知識
-
在Python中操做MySQL
-
NoSQL入門
-
NoSQL概述
-
Redis概述
-
Mongo概述
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 - 數據分析和機器學習
舒適提示:數據分析和機器學習的內容在code文件夾中,是用jupyter notebook書寫的代碼和筆記,須要先啓動jupyter notebook再打開對應的文件進行學習。
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.軟件過程模型
經典過程模型(瀑布模型)
- 可行性分析(研究作仍是不作),輸出《可行性分析報告》。
- 需求分析(研究作什麼),輸出《需求規格說明書》和產品界面原型圖。
- 概要設計和詳細設計,輸出概念模型圖(ER圖)、物理模型圖、類圖、時序圖等。
- 編碼 / 測試。
- 上線 / 維護。
瀑布模型最大的缺點是沒法擁抱需求變化,整套流程結束後才能看到產品,團隊士氣低落。
敏捷開發(Scrum)- 產品全部者、Scrum Master、研發人員 - Sprint
- 產品的Backlog(用戶故事、產品原型)。
- 計劃會議(評估和預算)。
- 平常開發(站立會議、番茄工做法、結對編程、測試先行、代碼重構……)。
- 修復bug(問題描述、重現步驟、測試人員、被指派人)。
- 發佈版本。
- 評審會議(Showcase,用戶須要參與)。
- 回顧會議(對當前迭代週期作一個總結)。
補充:敏捷軟件開發宣言
個體和互動 高於 流程和工具
工做的軟件 高於 詳盡的文檔
客戶合做 高於 合同談判
響應變化 高於 遵循計劃
角色:產品全部者(決定作什麼,能對需求拍板的人)、團隊負責人(解決各類問題,專一如何更好的工做,屏蔽外部對開發團隊的影響)、開發團隊(項目執行人員,具體指開發人員和測試人員)。
準備工做:商業案例和資金、合同、憧憬、初始產品需求、初始發佈計劃、入股、組建團隊。
敏捷團隊一般人數爲8-10人。
工做量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,儘可能把每一個工做分解到最小任務量,最小任務量標準爲工做時間不能超過兩天,而後估算整體項目時間。把每一個任務都貼在看板上面,看板上分三部分:to do(待完成)、in progress(進行中)和done(已完成)。
2.項目團隊組建
團隊的構成和角色
編程規範和代碼審查(flake八、pylint)
Python中的一些「慣例」(請參考《Python慣例-如何編寫Pythonic的代碼》)
影響代碼可讀性的緣由:
- 代碼註釋太少或者沒有註釋
- 代碼破壞了語言的最佳實踐
- 反模式編程(意大利麪代碼、複製-黏貼編程、自負編程、……)
項目選題和理解業務
1.選題範圍設定
- CMS(用戶端):新聞聚合網站、問答/分享社區、影評/書評網站等。
- MIS(用戶端+管理端):KMS、KPI考覈系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
- App後臺(管理端+數據接口):二手交易類、報刊雜誌類、小衆電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
- 其餘類型:自身行業背景和工做經驗、業務容易理解和把控。
- 2.需求理解、模塊劃分和任務分配
- 需求理解:頭腦風暴和競品分析。
- 模塊劃分:畫思惟導圖(XMind),每一個模塊是一個枝節點,每一個具體的功能是一個葉節點(用動詞表述),須要確保每一個葉節點沒法再生出新節點,肯定每一個葉子節點的重要性、優先級和工做量。
- 任務分配:由項目負責人根據上面的指標爲每一個團隊成員分配任務。
3.制定項目進度表
4.OOAD和數據庫設計
- UML(統一建模語言)的類圖
- 經過模型建立表(正向工程)
python manage.py makemigrations app
python manage.py migrate
- 使用PowerDesigner繪製物理模型圖。
- 經過數據表建立模型(反向工程)
python manage.py inspectdb > app/models.py
第92天:Docker容器詳解
- Docker簡介
- 安裝Docker
- 使用Docker建立容器(Nginx、MySQL、Redis、Gitlab、Jenkins)
- 構建Docker鏡像(Dockerfile的編寫和相關指令)
- 容器編排(Docker-compose)
- 集羣管理(Kubernetes)
第93天:MySQL性能優化
第94天:網絡API接口設計
第95天:[使用Django開發商業項目](./Day91-100/95.使用Django開發商業項 目.md)
項目開發中的公共問題
- 數據庫的配置(多數據庫、主從複製、數據庫路由)
- 緩存的配置(分區緩存、鍵設置、超時設置、主從複製、故障恢復(哨兵))
- 日誌的配置
- 分析和調試(Django-Debug-ToolBar)
- 好用的Python模塊(日期計算、圖像處理、數據加密、三方API)
REST API設計
- RESTful架構
- 理解RESTful架構
- RESTful API設計指南
- RESTful API最佳實踐
- API接口文檔的撰寫
- RAP2
- YAPI
- django-REST-framework的應用
項目中的重點難點剖析
- 使用緩存緩解數據庫壓力 - Redis
- 使用消息隊列作解耦合和削峯 - Celery + RabbitMQ
第96天:軟件測試和自動化測試
單元測試
- 測試的種類
- 編寫單元測試(unittest、pytest、nose二、tox、ddt、……)
- 測試覆蓋率(coverage)
項目部署
- 部署前的準備工做
- 關鍵設置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 緩存 / 數據庫)
- HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
- 日誌相關配置
- Linux經常使用命令回顧
- Linux經常使用服務的安裝和配置
- uWSGI/Gunicorn和Nginx的使用
- 對於不須要大量定製化的簡單應用程序,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的默認參數就已經可以適應大多數應用程序。
- uWSGI支持異構部署。
- 因爲Nginx自己支持uWSGI,在線上通常都將Nginx和uWSGI捆綁在一塊兒部署,並且uWSGI屬於功能齊全且高度定製的WSGI中間件。
- 在性能上,Gunicorn和uWSGI其實表現至關。
- Gunicorn和uWSGI的比較
- 使用虛擬化技術(Docker)部署測試環境和生產環境
性能測試
- AB的使用
- SQLslap的使用
- sysbench的使用
自動化測試
- 使用Shell和Python進行自動化測試
- 使用Selenium實現自動化測試
- Selenium IDE
- Selenium WebDriver
- Selenium Remote Control
- 測試工具Robot Framework介紹
第97天:電商網站技術要點剖析
第98天:項目部署上線和性能調優
- MySQL數據庫調優
- Web服務器性能優化
- Nginx負載均衡配置
- Keepalived實現高可用
- 代碼性能調優
- 多線程
- 異步化
- 靜態資源訪問優化
- 雲存儲
- CDN
第99天:面試中的公共問題
第100天:Python面試題集
感謝做者分享-http://bjbsair.com/2020-04-07/tech-info/30738.html
若是你仍是迷茫到底如何系統的學習Python,不要緊!
爲你們整理了Python100天重新手到大師的系統學習教程,讓你不用再糾結,必定能幫助到你的問題。
包括從基礎的Python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。送給正在學習Python的小夥伴!『內容較長,建議能夠先添加收藏,關注轉發就更開心了』
ps:『儘管本文是簡述100天重新手到大師的每個階段學習內容已然篇幅不短,爲了你們方便學習,給你們準備了相對應的學習文檔跟各階段的python視頻/資料, 即見文末,如今咱們仍是言歸正傳*開始』
Python應用領域和就業形勢分析
簡單的說,Python是一個「優雅」、「明確」、「簡單」的編程語言。
- 學習曲線低,非專業人士也能上手
- 開源系統,擁有強大的生態圈
- 解釋型語言,完美的平臺可移植性
- 支持面向對象和函數式編程
- 可以經過調用C/C++代碼擴展功能
- 代碼規範程度高,可讀性強
目前幾個比較流行的領域,Python都有用武之地。
- 雲基礎設施 - Python / Java / Go
- DevOps - Python / Shell / Ruby / Go
- 網絡爬蟲 - Python / PHP / C++
- 數據分析挖掘 - Python / R / Scala / Matlab
- 機器學習 - Python / R / Java / Lisp
做爲一名Python開發者,主要的就業領域包括:
- Python服務器後臺開發 / 遊戲服務器開發 / 數據接口開發工程師
- Python自動化運維工程師
- Python數據分析 / 數據可視化 / 大數據工程師
- Python爬蟲工程師
- Python聊天機器人開發 / 圖像識別和視覺算法 / 深度學習工程師
下圖顯示了主要城市Python招聘需求量及薪資待遇排行榜(截止到2018年5月)。
給初學者的幾個建議:
- Make English as your working language.(讓英語成爲你的工做語言)
- Practice makes perfect.(熟能生巧)
- All experience comes from mistakes.(全部的經驗都源於你犯過的錯誤)
- Don't be one of the leeches.(不要當伸手黨)
- Either outstanding or out.(要麼出衆,要麼出局)
Day01~15 - Python語言基礎
Day01 - 初識Python
- Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域
- 搭建編程環境 - Windows環境 / Linux環境 / MacOS環境
- 從終端運行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 - 構造程序邏輯
- 經典案例:水仙花數 / 百錢百雞 / 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
-
範式理論 - 設計二維表的指導思想
-
數據完整性
-
數據一致性
-
DDL - 數據定義語言 - create / drop / alter
-
DML - 數據操做語言 - insert / delete / update / select
-
DCL - 數據控制語言 - grant / revoke
-
關係型數據庫概述
-
MySQL的安裝和使用
-
SQL的使用
-
相關知識
-
在Python中操做MySQL
-
NoSQL入門
-
NoSQL概述
-
Redis概述
-
Mongo概述
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 - 數據分析和機器學習
舒適提示:數據分析和機器學習的內容在code文件夾中,是用jupyter notebook書寫的代碼和筆記,須要先啓動jupyter notebook再打開對應的文件進行學習。
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.軟件過程模型
經典過程模型(瀑布模型)
- 可行性分析(研究作仍是不作),輸出《可行性分析報告》。
- 需求分析(研究作什麼),輸出《需求規格說明書》和產品界面原型圖。
- 概要設計和詳細設計,輸出概念模型圖(ER圖)、物理模型圖、類圖、時序圖等。
- 編碼 / 測試。
- 上線 / 維護。
瀑布模型最大的缺點是沒法擁抱需求變化,整套流程結束後才能看到產品,團隊士氣低落。
敏捷開發(Scrum)- 產品全部者、Scrum Master、研發人員 - Sprint
- 產品的Backlog(用戶故事、產品原型)。
- 計劃會議(評估和預算)。
- 平常開發(站立會議、番茄工做法、結對編程、測試先行、代碼重構……)。
- 修復bug(問題描述、重現步驟、測試人員、被指派人)。
- 發佈版本。
- 評審會議(Showcase,用戶須要參與)。
- 回顧會議(對當前迭代週期作一個總結)。
補充:敏捷軟件開發宣言
個體和互動 高於 流程和工具
工做的軟件 高於 詳盡的文檔
客戶合做 高於 合同談判
響應變化 高於 遵循計劃
角色:產品全部者(決定作什麼,能對需求拍板的人)、團隊負責人(解決各類問題,專一如何更好的工做,屏蔽外部對開發團隊的影響)、開發團隊(項目執行人員,具體指開發人員和測試人員)。
準備工做:商業案例和資金、合同、憧憬、初始產品需求、初始發佈計劃、入股、組建團隊。
敏捷團隊一般人數爲8-10人。
工做量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,儘可能把每一個工做分解到最小任務量,最小任務量標準爲工做時間不能超過兩天,而後估算整體項目時間。把每一個任務都貼在看板上面,看板上分三部分:to do(待完成)、in progress(進行中)和done(已完成)。
2.項目團隊組建
團隊的構成和角色
編程規範和代碼審查(flake八、pylint)
Python中的一些「慣例」(請參考《Python慣例-如何編寫Pythonic的代碼》)
影響代碼可讀性的緣由:
- 代碼註釋太少或者沒有註釋
- 代碼破壞了語言的最佳實踐
- 反模式編程(意大利麪代碼、複製-黏貼編程、自負編程、……)
項目選題和理解業務
1.選題範圍設定
- CMS(用戶端):新聞聚合網站、問答/分享社區、影評/書評網站等。
- MIS(用戶端+管理端):KMS、KPI考覈系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
- App後臺(管理端+數據接口):二手交易類、報刊雜誌類、小衆電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
- 其餘類型:自身行業背景和工做經驗、業務容易理解和把控。
- 2.需求理解、模塊劃分和任務分配
- 需求理解:頭腦風暴和競品分析。
- 模塊劃分:畫思惟導圖(XMind),每一個模塊是一個枝節點,每一個具體的功能是一個葉節點(用動詞表述),須要確保每一個葉節點沒法再生出新節點,肯定每一個葉子節點的重要性、優先級和工做量。
- 任務分配:由項目負責人根據上面的指標爲每一個團隊成員分配任務。
3.制定項目進度表
4.OOAD和數據庫設計
- UML(統一建模語言)的類圖
- 經過模型建立表(正向工程)
python manage.py makemigrations app
python manage.py migrate
- 使用PowerDesigner繪製物理模型圖。
- 經過數據表建立模型(反向工程)
python manage.py inspectdb > app/models.py
第92天:Docker容器詳解
- Docker簡介
- 安裝Docker
- 使用Docker建立容器(Nginx、MySQL、Redis、Gitlab、Jenkins)
- 構建Docker鏡像(Dockerfile的編寫和相關指令)
- 容器編排(Docker-compose)
- 集羣管理(Kubernetes)
第93天:MySQL性能優化
第94天:網絡API接口設計
第95天:[使用Django開發商業項目](./Day91-100/95.使用Django開發商業項 目.md)
項目開發中的公共問題
- 數據庫的配置(多數據庫、主從複製、數據庫路由)
- 緩存的配置(分區緩存、鍵設置、超時設置、主從複製、故障恢復(哨兵))
- 日誌的配置
- 分析和調試(Django-Debug-ToolBar)
- 好用的Python模塊(日期計算、圖像處理、數據加密、三方API)
REST API設計
- RESTful架構
- 理解RESTful架構
- RESTful API設計指南
- RESTful API最佳實踐
- API接口文檔的撰寫
- RAP2
- YAPI
- django-REST-framework的應用
項目中的重點難點剖析
- 使用緩存緩解數據庫壓力 - Redis
- 使用消息隊列作解耦合和削峯 - Celery + RabbitMQ
第96天:軟件測試和自動化測試
單元測試
- 測試的種類
- 編寫單元測試(unittest、pytest、nose二、tox、ddt、……)
- 測試覆蓋率(coverage)
項目部署
- 部署前的準備工做
- 關鍵設置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 緩存 / 數據庫)
- HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
- 日誌相關配置
- Linux經常使用命令回顧
- Linux經常使用服務的安裝和配置
- uWSGI/Gunicorn和Nginx的使用
- 對於不須要大量定製化的簡單應用程序,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的默認參數就已經可以適應大多數應用程序。
- uWSGI支持異構部署。
- 因爲Nginx自己支持uWSGI,在線上通常都將Nginx和uWSGI捆綁在一塊兒部署,並且uWSGI屬於功能齊全且高度定製的WSGI中間件。
- 在性能上,Gunicorn和uWSGI其實表現至關。
- Gunicorn和uWSGI的比較
- 使用虛擬化技術(Docker)部署測試環境和生產環境
性能測試
- AB的使用
- SQLslap的使用
- sysbench的使用
自動化測試
- 使用Shell和Python進行自動化測試
- 使用Selenium實現自動化測試
- Selenium IDE
- Selenium WebDriver
- Selenium Remote Control
- 測試工具Robot Framework介紹
第97天:電商網站技術要點剖析
第98天:項目部署上線和性能調優
- MySQL數據庫調優
- Web服務器性能優化
- Nginx負載均衡配置
- Keepalived實現高可用
- 代碼性能調優
- 多線程
- 異步化
- 靜態資源訪問優化
- 雲存儲
- CDN
第99天:面試中的公共問題
第100天:Python面試題集
感謝做者分享-http://bjbsair.com/2020-04-07/tech-info/30738.html
若是你仍是迷茫到底如何系統的學習Python,不要緊!
爲你們整理了Python100天重新手到大師的系統學習教程,讓你不用再糾結,必定能幫助到你的問題。
包括從基礎的Python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。送給正在學習Python的小夥伴!『內容較長,建議能夠先添加收藏,關注轉發就更開心了』
ps:『儘管本文是簡述100天重新手到大師的每個階段學習內容已然篇幅不短,爲了你們方便學習,給你們準備了相對應的學習文檔跟各階段的python視頻/資料, 即見文末,如今咱們仍是言歸正傳*開始』
Python應用領域和就業形勢分析
簡單的說,Python是一個「優雅」、「明確」、「簡單」的編程語言。
- 學習曲線低,非專業人士也能上手
- 開源系統,擁有強大的生態圈
- 解釋型語言,完美的平臺可移植性
- 支持面向對象和函數式編程
- 可以經過調用C/C++代碼擴展功能
- 代碼規範程度高,可讀性強
目前幾個比較流行的領域,Python都有用武之地。
- 雲基礎設施 - Python / Java / Go
- DevOps - Python / Shell / Ruby / Go
- 網絡爬蟲 - Python / PHP / C++
- 數據分析挖掘 - Python / R / Scala / Matlab
- 機器學習 - Python / R / Java / Lisp
做爲一名Python開發者,主要的就業領域包括:
- Python服務器後臺開發 / 遊戲服務器開發 / 數據接口開發工程師
- Python自動化運維工程師
- Python數據分析 / 數據可視化 / 大數據工程師
- Python爬蟲工程師
- Python聊天機器人開發 / 圖像識別和視覺算法 / 深度學習工程師
下圖顯示了主要城市Python招聘需求量及薪資待遇排行榜(截止到2018年5月)。
給初學者的幾個建議:
- Make English as your working language.(讓英語成爲你的工做語言)
- Practice makes perfect.(熟能生巧)
- All experience comes from mistakes.(全部的經驗都源於你犯過的錯誤)
- Don't be one of the leeches.(不要當伸手黨)
- Either outstanding or out.(要麼出衆,要麼出局)
Day01~15 - Python語言基礎
Day01 - 初識Python
- Python簡介 - Python的歷史 / Python的優缺點 / Python的應用領域
- 搭建編程環境 - Windows環境 / Linux環境 / MacOS環境
- 從終端運行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 - 構造程序邏輯
- 經典案例:水仙花數 / 百錢百雞 / 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
-
範式理論 - 設計二維表的指導思想
-
數據完整性
-
數據一致性
-
DDL - 數據定義語言 - create / drop / alter
-
DML - 數據操做語言 - insert / delete / update / select
-
DCL - 數據控制語言 - grant / revoke
-
關係型數據庫概述
-
MySQL的安裝和使用
-
SQL的使用
-
相關知識
-
在Python中操做MySQL
-
NoSQL入門
-
NoSQL概述
-
Redis概述
-
Mongo概述
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 - 數據分析和機器學習
舒適提示:數據分析和機器學習的內容在code文件夾中,是用jupyter notebook書寫的代碼和筆記,須要先啓動jupyter notebook再打開對應的文件進行學習。
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.軟件過程模型
經典過程模型(瀑布模型)
- 可行性分析(研究作仍是不作),輸出《可行性分析報告》。
- 需求分析(研究作什麼),輸出《需求規格說明書》和產品界面原型圖。
- 概要設計和詳細設計,輸出概念模型圖(ER圖)、物理模型圖、類圖、時序圖等。
- 編碼 / 測試。
- 上線 / 維護。
瀑布模型最大的缺點是沒法擁抱需求變化,整套流程結束後才能看到產品,團隊士氣低落。
敏捷開發(Scrum)- 產品全部者、Scrum Master、研發人員 - Sprint
- 產品的Backlog(用戶故事、產品原型)。
- 計劃會議(評估和預算)。
- 平常開發(站立會議、番茄工做法、結對編程、測試先行、代碼重構……)。
- 修復bug(問題描述、重現步驟、測試人員、被指派人)。
- 發佈版本。
- 評審會議(Showcase,用戶須要參與)。
- 回顧會議(對當前迭代週期作一個總結)。
補充:敏捷軟件開發宣言
個體和互動 高於 流程和工具
工做的軟件 高於 詳盡的文檔
客戶合做 高於 合同談判
響應變化 高於 遵循計劃
角色:產品全部者(決定作什麼,能對需求拍板的人)、團隊負責人(解決各類問題,專一如何更好的工做,屏蔽外部對開發團隊的影響)、開發團隊(項目執行人員,具體指開發人員和測試人員)。
準備工做:商業案例和資金、合同、憧憬、初始產品需求、初始發佈計劃、入股、組建團隊。
敏捷團隊一般人數爲8-10人。
工做量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,儘可能把每一個工做分解到最小任務量,最小任務量標準爲工做時間不能超過兩天,而後估算整體項目時間。把每一個任務都貼在看板上面,看板上分三部分:to do(待完成)、in progress(進行中)和done(已完成)。
2.項目團隊組建
團隊的構成和角色
編程規範和代碼審查(flake八、pylint)
Python中的一些「慣例」(請參考《Python慣例-如何編寫Pythonic的代碼》)
影響代碼可讀性的緣由:
- 代碼註釋太少或者沒有註釋
- 代碼破壞了語言的最佳實踐
- 反模式編程(意大利麪代碼、複製-黏貼編程、自負編程、……)
項目選題和理解業務
1.選題範圍設定
- CMS(用戶端):新聞聚合網站、問答/分享社區、影評/書評網站等。
- MIS(用戶端+管理端):KMS、KPI考覈系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
- App後臺(管理端+數據接口):二手交易類、報刊雜誌類、小衆電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
- 其餘類型:自身行業背景和工做經驗、業務容易理解和把控。
- 2.需求理解、模塊劃分和任務分配
- 需求理解:頭腦風暴和競品分析。
- 模塊劃分:畫思惟導圖(XMind),每一個模塊是一個枝節點,每一個具體的功能是一個葉節點(用動詞表述),須要確保每一個葉節點沒法再生出新節點,肯定每一個葉子節點的重要性、優先級和工做量。
- 任務分配:由項目負責人根據上面的指標爲每一個團隊成員分配任務。
3.制定項目進度表
4.OOAD和數據庫設計
- UML(統一建模語言)的類圖
- 經過模型建立表(正向工程)
python manage.py makemigrations app
python manage.py migrate
- 使用PowerDesigner繪製物理模型圖。
- 經過數據表建立模型(反向工程)
python manage.py inspectdb > app/models.py
第92天:Docker容器詳解
- Docker簡介
- 安裝Docker
- 使用Docker建立容器(Nginx、MySQL、Redis、Gitlab、Jenkins)
- 構建Docker鏡像(Dockerfile的編寫和相關指令)
- 容器編排(Docker-compose)
- 集羣管理(Kubernetes)
第93天:MySQL性能優化
第94天:網絡API接口設計
第95天:[使用Django開發商業項目](./Day91-100/95.使用Django開發商業項 目.md)
項目開發中的公共問題
- 數據庫的配置(多數據庫、主從複製、數據庫路由)
- 緩存的配置(分區緩存、鍵設置、超時設置、主從複製、故障恢復(哨兵))
- 日誌的配置
- 分析和調試(Django-Debug-ToolBar)
- 好用的Python模塊(日期計算、圖像處理、數據加密、三方API)
REST API設計
- RESTful架構
- 理解RESTful架構
- RESTful API設計指南
- RESTful API最佳實踐
- API接口文檔的撰寫
- RAP2
- YAPI
- django-REST-framework的應用
項目中的重點難點剖析
- 使用緩存緩解數據庫壓力 - Redis
- 使用消息隊列作解耦合和削峯 - Celery + RabbitMQ
第96天:軟件測試和自動化測試
單元測試
- 測試的種類
- 編寫單元測試(unittest、pytest、nose二、tox、ddt、……)
- 測試覆蓋率(coverage)
項目部署
- 部署前的準備工做
- 關鍵設置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 緩存 / 數據庫)
- HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
- 日誌相關配置
- Linux經常使用命令回顧
- Linux經常使用服務的安裝和配置
- uWSGI/Gunicorn和Nginx的使用
- 對於不須要大量定製化的簡單應用程序,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的默認參數就已經可以適應大多數應用程序。
- uWSGI支持異構部署。
- 因爲Nginx自己支持uWSGI,在線上通常都將Nginx和uWSGI捆綁在一塊兒部署,並且uWSGI屬於功能齊全且高度定製的WSGI中間件。
- 在性能上,Gunicorn和uWSGI其實表現至關。
- Gunicorn和uWSGI的比較
- 使用虛擬化技術(Docker)部署測試環境和生產環境
性能測試
- AB的使用
- SQLslap的使用
- sysbench的使用
自動化測試
- 使用Shell和Python進行自動化測試
- 使用Selenium實現自動化測試
- Selenium IDE
- Selenium WebDriver
- Selenium Remote Control
- 測試工具Robot Framework介紹
第97天:電商網站技術要點剖析
第98天:項目部署上線和性能調優
- MySQL數據庫調優
- Web服務器性能優化
- Nginx負載均衡配置
- Keepalived實現高可用
- 代碼性能調優
- 多線程
- 異步化
- 靜態資源訪問優化
- 雲存儲
- CDN
第99天:面試中的公共問題
第100天:Python面試題集