0716更新
Python可以做什麽?
Python的熱度毋庸置疑,現在國內,不僅考國家二級電腦證需要學習Python,它甚至出現在了小學生的教材裏。
那麽高度如此高漲的Python,都可以用來做什麽呢?
目前來說,Python有五大主要用途以及多類其他用途。
一、主要用途
1、Web開發
Python是一種解釋型的手稿語言,用來開發Web套用,不但開發效率高,而且執行速度快。許多國內外的互聯網公司將python作為主要開發語言:豆瓣、知乎、果殼網、Google、NASA、YouTube、Facebook……(再次感嘆Python的強大)
除了大型的互聯網公司,由於後台伺服器的通用性,很多App和遊戲也選擇用 Python實作。
基於Python的Web框架有上百種,樣版技術也比較成熟,其中常用的是Django、Flask、Tornado。
對於入門新手來說,Django和Flask可以說是首選,它們可以幫助你用Python編寫伺服器端程式碼(後端程式碼)。尤其是Flask,它要掌握的元件更少,能夠實作簡單、靈活和細致的控制,並能讓你自己決定實作方式。
2、數據分析/視覺化
Python擁有更加完備的生態環境,對於數據分析中會用到的分布式計算、數據庫、視覺化等,都有對應完成的模組。有一點要說,在你進行數據視覺化時,可以選擇Matplotlib,相對於其他的庫來說更容易上手,當你掌握了它以後,也對你學習其他的庫有所幫助。
Hadoop-MapReduce和Spark都可以用Python完成計算邏輯,這大概也是數據工程師、科學家鐘愛Python的原因。
3、網絡爬蟲
說起Python的套用場景,最容易被提起來的就是網絡爬蟲。Google是最早用Python作為爬蟲基礎的公司,在此之前,人們如果想搜刮網上的內容,只能用采集器。
很多人在學了Python以後,都不知道幹什麽好,也無處施展,根本不了解自己對Python的掌握程度,這個時候,都可以試試爬蟲。比如豆瓣的推薦電影列表、社區留言、音樂軟件評論等,都可以用來做練習。
4、機器學習
說起人工智能,感覺前途無限好,周圍很多人想參與進來,也讓更多人對Python充滿了學習的動力和期待。
人工智能需要更加精細的最佳化,也需要GPU、專用硬件之類的介面,因此人工智能的核心演算法還是依賴於C/C++。那Python到底用來做什麽呢?
Python是庫的API binding,要開發一個其他語言到C/C++的跨語言介面,它是最容易的。
什麽是機器學習呢?
我在網上看見過一個很容易理解的例子:
(以下為事例參照)
你將1000張狗的圖片和1000張桌子的圖片輸入給機器學習演算法,讓它掌握狗和桌子間的區別。那麽當你給出新的圖片讓它辨識是狗還是桌子時,它就能夠進行判斷。
這有點類似孩子學習新事物的方式。
孩子是如何學習認知狗或桌子的呢?就是透過大量的例子。
你不會明確告訴孩子:「如果某個毛茸茸的東西有淺棕色的毛發,那麽就可能是狗。」
你會說,「這是狗,這也是狗。而這是桌子,那個也是桌子。「
機器學習的演算法包括神經網絡、深度學習、支持向量機及隨機森林,基本道理和上述相似,套用場景很多:例如推薦系統、人臉辨識及語音辨識等。
對於機器學習庫和Python框架,scikit-learn和TensorFlow算是兩個比較熱門的。
區別就在於:
scikit-learn帶有一些內建的熱門機器學習演算法。 (適合剛開始進行機器學習專案)TensorFlow是一個低階庫,能讓你建立自訂機器學習演算法。 (適合解決效率問題)
5、自動化運維
Python寫好的指令碼語法簡單,易於編寫,而且進行測試也很快。
目前很多Linux發行版都很適合用Python指令碼進行批次化的檔部署和執行調整。Python中也包含許多方便的工具,從調控ssh/sftp用的paramiko,到監控服務用的supervisor,再到bazel等構建工具,甚至conan等用於C++的包管理工具,都可以用Python實作。
二、其他套用(結合了自己的經驗及網絡套用)
嵌入式套用:Python可以與Rasberry Pi一起用,在硬件愛好者中很流行。
桌面套用:你可以用Python的Tkinter,但這並不是最熱門的選擇,Java,C#和C ++等語言似乎更受歡迎。
系統編程:提供API,能方便進行系統維護和管理,Linux下標誌性語言之一,是很多系統管理員理想的編程工具。
數學處理:NumPy擴充套件提供大量與許多標準數學庫的介面。
文本處理:Python提供的re模組能支持正規表式,還提供SGML,XML分析模組,許多程式設計師利用Python進行XML程式的開發。
數據庫編程:程式設計師可透過遵循PythonDB-API(數據庫應用程式編程介面)規範的模組與MicrosoftSQLServer,Oracle,Sybase,DB2,MySQL、SQLite等數據庫通訊。Python內建有一個Gadfly模組,提供了一個完整的SQL環境。
網絡編程:提供豐富的模組支持sockets編程,能方便快速地開發分布式應用程式。很多大規模軟件開發計劃例如Zope,Mnet及BitTorrent.Google都在廣泛地使用它。
多媒體套用:Python的PyOpenGL模組封裝了"OpenGL應用程式編程介面",能進行二維和三維影像處理。PyGame模組可用於編寫遊戲軟件。
Python可以怎麽學?
說實話,Python算是零基礎友好的一大實用程式語言了。即便是沒有電腦基礎,也可以透過系統的學習過程來掌握它。
Python語法結構同時兼顧了物件導向編程的靈活性及函數語言程式設計語言的方便性,給初學者大量的發揮空間,一般來說,如果你是在抱著認真負責的學習態度下,想掌握Python語言的語法結構,大概1-2周的時間就差不多。
學習網站可以選擇菜鳥教程、Codecademy、Coursera和 CSDN。
站內的知識點很全面,無論你想學習哪種領域,都可以輕松在這裏找到合適的資料。
這個學習網站很大的優勢就是在瀏覽器上直接編寫程式碼,輕松解決了初學者程式環境安裝的困擾。
如果你英文比較好,交流沒有問題的話,比較推薦這個網站。這是一個課程學習網站,內容涵蓋編程各個領域,目前已經和200+所大學合作課程,還可以線上讀學士、碩士學位。
如果說你的英文是難題,給你推薦CSDN,是國內老牌程式設計師社區,裏邊有各領域博文、資料、課程,基本很多專業問題都可以在這裏查。
另外,我也結合了一些書和影片課,買書是因為文字落在紙面上,有助於及時理解和記憶;影片課的話,我是自學Python,因為還有工作,只能利用碎片時間去學,我為了苦學Python,在網易雲課堂、51、慕課、CSDN學院買了不下10套關於Python入門的課,在得到也買了時間管理課。
如果你跟我一樣,想進行整體的學習,也想節省一些學習時間,加上我也比較懶,非得有人督促著才能堅持不懈,你可以試試體統學習,我選的是CSDN的Python訓練營。
如果有的同學目前是打算一步一步慢慢來,或者之前已經有一些基礎,只是想突破單個方向,下邊這幾門課程我也在剛接觸Python的時候買來學的,價格更便宜,內容卻絲毫不打折扣,是比較值得學習的!
如果是毫無基礎可言,甚至不知道如何下載Python, 比較推薦齊偉老師的【8小時Python零基礎輕松入門】或者是董付國的【Python可以這樣學】。細節全面,適合小白入門。
這回是偏基礎點的,之前也分享過兩門,都可以進行參考。
我買過兩類數據分析課,零基礎入門和多方位學習,現在直接發出來,也是為了方便不同需求的同學。
說起人工智能講的好的老師,必說唐宇迪(感覺真的霸榜各個學習平台)。
他是電腦的博士,好像還參與了挺多國家級專案,我聽過幾次他的課和直播,老師的講課風格很幽默,經常會舉例子,讓你更清晰的搞懂知識點,我覺得自己是在學習中享受。
(基礎知識配實戰,這樣學習起來相對也更容易)
最後要給你們推薦的是書的部份,我自己選了4本書:
如果是初學Python的話,沒有什麽編程基礎,還是比較適合從這本開始學的。整體是以習題的方式開始引導初學者學習編程。
這本書大概算是保姆級照顧了,細節描寫不能再清晰。整體分為兩個部份:基礎知識和專案實戰。不看真的不知道,程式碼類的實戰專案竟然能在紙上講清楚!
這本書既有知識點的詳細講解,又有更多高階用法的延伸,對於已經有一定基礎但是掌握不牢的同學來說,無疑是值得擁有的好書。
這本書對於Python的高級用法探究很深入,涵蓋了數據結構、物件、並列與並行、超編程等多個方向。
也許有人會問:「你幹嘛把自己逼得那麽緊,安安穩穩的不就很好了嗎?」
作為一個人,如果長期處於一個舒適安逸的環境,慢慢就會被這種安逸籠罩,變得懶惰,原本擁有的能力也會逐步減弱,當有一天危險來臨,所在的舒適圈被打破,連生存下去都是個難題!
所以,為了好好活下去,要不跳出舒適圈,要不就擴大你的舒適圈。
這些是我自己學習的時候用到的一些國內外網站+書籍+影片課,整體來說是夠用的,如果還有其他更好的,各位同學可以評論區裏分享出來,互換資源,共同學習!
更新:
有很多朋友私信問我Python學習有沒有什麽好的資料,我給大家找了幾門不錯的免費課,想學的可以看看。
【Python入門教程】
【Python初級入門精講】
【Python爬蟲開發】
【Python實戰編程】
【1小時掌握Python爬蟲+高效學習法則】
原回答:
之前回答過很受知友們歡迎,再分享一下。
Github上位名叫駱昊 (jackfrued) 的資深程式設計師,為大家規劃了一條從「從新手到大師」的百天之路!我覺得這個模式你可以參考一下。
現在已經有5w+星了!
給初學者的幾個建議:
先附上github地址:
下面是這個一百天計劃裏面的學習框架,我在這裏放上來。 (PS.對於毫無基礎的人想百天完成這裏面的學習計劃就實話說根本是不可能的,我個人是比較認可這個學習框架的,大家沒有必要嚴格卡這個100天,照著這個行程學習是完全可以的。)
Day01~15 - Python語言基礎
Day01 - 初識PythonPython簡介 - 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 - 構造程式邏輯基礎練習 - 水仙花數 / 完美數 / 五人分魚 / 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 - 檔和異常Day16~Day20 - Python語言進階
Day21~30 - Web前端入門
Day31~35 - 玩轉Linux作業系統
Day36~40 - 數據庫基礎和進階
Day41~55 - 實戰Django
Day41 - 快速上手Day50 - RESTful架構和DRF進階
Day51 - 使用緩存
Day56~60 - 實戰Flask
Day56 - Flask入門Day57 - 樣版的使用
Day58 - 表單的處理
Day59 - 數據庫操作
Day60 - 專案實戰
Day61~65 - 實戰Tornado
Day61 - 預備知識Day66~75 - 爬蟲開發
Day66 - 網絡爬蟲和相關工具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天:團隊專案開發準備-
軟體流程模型
準備工作:商業案例和資金、合約、憧憬、初始產品需求、初始釋出計劃、入股、組建團隊。
敏捷團隊通常人數為8-10人。
工作量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,盡量把每個工作分解到最小任務量,最小任務量標準為工作時間不能超過兩天,然後估算總體專案時間。把每個任務都貼在白板上面,白板上分三部份:to do(待完成)、in progress(進行中)和done(已完成)。
-
專案團隊組建
說明:謝謝付祥英女士繪制了下面這張精美的公司組織架構圖。
影響程式碼可讀性的原因:
2.團隊開發工具介紹
專案選題和理解業務
-
選題範圍設定
MIS(使用者端+管理端):KMS、KPI考核系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
App後台(管理端+數據介面):二手交易類、報刊雜誌類、小眾電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
其他類別:自身行業背景和工作經驗、業務容易理解和把控。
2.需求理解、模組劃分和任務分配
模組劃分:畫思維導圖(XMind),每個模組是一個枝節點,每個具體的功能是一個葉節點(用動詞表述),需要確保每個葉節點無法再生出新節點,確定每個葉子節點的重要性、優先級和工作量。
任務分配:由專案負責人根據上面的指標為每個團隊成員分配任務。
3.制定專案進度表(每日更新)
第92天:Docker的使用
第93天:數據庫設計和OOAD
概念模型和正向工程
-
UML(統一建模語言)的類圖
-
透過模型建立表(正向工程)
python manage.py makemigrations app python manage.py migrate
物理模型和反向工程
-
PowerDesigner
2.透過數據表建立模型(反向工程)
python manage.py inspectdb > app/models.py
第95天:使用Django開發專案
專案開發中的公共問題
數據庫的配置(多數據庫、主從復制、數據庫路由)緩存的配置(分區緩存、鍵設定、超時設定、主從復制、故障恢復(哨兵))
日誌的配置
分析和偵錯(Django-Debug-ToolBar)
好用的Python模組(日期計算、影像處理、數據加密、三方API)
REST API設計
- RESTful架構
- API介面文件的撰寫
- django-REST-framework的套用
專案中的重點難點剖析
- 使用緩存緩解數據庫壓力 - Redis
- 使用訊息佇列做解耦合和削峰 - Celery + RabbitMQ
第96天:軟件測試和自動化測試
單元測試
- 測試的種類
- 編寫單元測試(unittest、pytest、nose2、tox、ddt、……)
- 測試覆蓋率(coverage)
專案部署
- 部署前的準備工作
- Linux常用命令回顧
- Linux常用服務的安裝和配置
- uWSGI/Gunicorn和Nginx的使用
- 虛擬化技術(Docker)
效能測試
- AB的使用
- SQLslap的使用
- sysbench的使用
自動化測試
- 使用Shell和Python進行自動化測試
- 使用Selenium實作自動化測試
- 測試工具Robot Framework介紹
第98天:專案部署上線和效能調優
- MySQL數據庫調優
- Web伺服器效能最佳化
3.程式碼效能調優
4.靜態資源存取最佳化
第100天:英語面試
作者:駱昊 (jackfrued)
來源:github
github地址:https:// github.com/jackfrued/Py thon-100-Days
另外,CSDN也出過一個圖譜,
希望能幫到你。