冰楓論壇

 找回密碼
 立即註冊
ads_sugarbook
搜索
查看: 3035|回覆: 0

[心得] Coding 初學指南-Python

[複製鏈接]

879

主題

1

好友

1238

積分

金牌會員

Rank: 6Rank: 6

UID
64909
帖子
919
主題
879
精華
0
積分
1238
楓幣
69
威望
1236
存款
0
贊助金額
0
推廣
0
GP
0
閱讀權限
70
性別
保密
在線時間
48 小時
註冊時間
2014-6-8
最後登入
2022-7-11

積分勳章 幼兒勳章 性別(女) 懶人勳章 性別(男) 太陽勳章 神手勳章 音樂勳章 2015年紀念勳章 發帖達人 私服達人 instagram紀念勳章 Android勳章 2016年紀念勳章 Android勳章 屁孩勳章

發表於 2016-12-4 00:07:34 |顯示全部樓層
Python 是一種物件導向、直譯式的電腦程式語言,具有近二十年的發展歷史。它包含了一組功能完備的標準庫,能夠輕鬆完成很多常見的任務。
(From Wikipedia)
選擇 Python 作為第一個深入學習的語言有很多好處。他的語法跟英文相似,比起其他語言經常用到 ;{}() 來控制語法不同的段落,Python 主要用的是空白與縮排。
Python 能用互動式的方式(read–eval–print loop, REPL)來操作,以邊試邊做的方法來開發很適合初學者。
內建的標準庫(standard library)功能很豐富,在網路、文字處理、檔案處理、甚至 GUI 介面都能用它完成。除此之外,它的第三方套件也很多,在 Linux 上很好安裝,這樣幾乎能用 Python 完成各種事情。

聽說系列
(需要接觸過 Python 之後才能理解)
聽說 Python 跑很慢,是不是不能用來計算/分析/大檔案?
Python 的確執行效率比編譯式的語言差(例:C/C++、Java),但這很可能不是你程式跑得慢的主因,所以也不代表 Python 不能處理計算量高的工作。
碰到程式跑得比想像中慢的時候,有幾個步驟:
  • 到底是哪幾行程式跑得慢?
  • 這是最佳的演算法嗎?
  • 這是最有效率的 Python 語法嗎?
如果用到了最後一步情況還是沒有改善的話,就可以開始把那些部份用其他語言改寫,例如:C。Python 能很容易跟 C 語言的結合。而且常見的 C 語言加速,其實都有 Python 套件能支援了,例如 Numpy,所以大部份的時間,都能在不使用 Python 以外的語言完成高量計算。
我在實習時候,也常碰到需要優化的問題。用 Python 我能很輕鬆(一天內)把工作分配到 4 台主機 64 cores 上跑,也許方法不有效率,但比起我花幾天把 Python 改寫成 C/C++,實作更精密有效的算法(還要是 multithread),仔細處理可能的 corner case,平行化之後本來三四天的計算時間我 2 個小時就能收工。
更重要的是,這個實驗就只跑個兩次。
比起計算時間,開發時間對工程師而言是更加寶貴的。尤其在實驗室,最關心的是這個方法行不行得通,程式跑得慢有很多解決的方式,例如平行化。重點在解決問題,需要用多一點的資源其實不是很重要。
如果問我 Python 還是 Matlab 比較快?這邊有正經的 Python vs Matlab。一開始選 Python 慢的話有很多條路可以走,但 Matlab 呢? meh
所以 Python 跑得快不快?它單打獨鬥有極限,但它有很多快樂夥伴。O’Reilly 有本 High Performance Python 值得一看。
Python 2 還是 Python 3,聽我朋友說…比較好?
隨著時間流逝,每過一天我都可以更確信的說「請學 Python 3」。現在有在用 Python 2 多半也是用 2.7 版本,要把 3.3+ 的程式碼改回 2.7 也不難。
相關資源
連同前幾章,如果你要在自己電腦上設定 Python 開發環境,可以參考 Djang Girls Taipei Tutorial。另外,Python Taiwan Wiki 有更完整的 Python 學習資源列表。
O’Reilly(歐萊禮)的書,官方線上商店常有 50% 折扣,PDF/ePub/Mobi 格式都有, 買一次就能輕鬆在電腦、kindle、eReader 上閱讀,能接受英文的話,十分推薦跟官方購買。中文版就以天瓏書局為主。它也有賣英文紙本,逛實體店很舒服
Introducing Python(精通 Python)
O’Reilly Python 系列的書都寫得很好。這本是比較新出的,好處是它針對初學者,比較薄,能在短時間看完,文字很流暢。想要快速掌握基礎的語法的話,建議閱讀 Chp1 到 Chp7,以及 Chp8 File I/O 部份。
“Introducing Python”, Bill Lubanovic. O’Reilly, 2014.11
Python 程式設計入門
2015 四月由葉難出的中文書,針對初學者,並有列出 Python 2.7、3.3、3.4 不同版本間的差異。
《Python 程式設計入門》,葉難。博碩 2015.04
Python 官網
Python 的官網除了查語言特性之外,還能用來學習怎麼使用 stdlib。Python 標準函式庫功能包山包海,在你想要做什麼之前,都應該到官網查看看是不是內建 module 就已經提供功能了。除外,還有一個簡潔的 tutorial,供初學者參考,適合有學過其他語言的人。我認為這份寫得非常好,苦於沒有中文,以前經驗不太容易推廣,但值得看
“Python Tutorial”, Official Python Documentation, Python Devs.
Programming in Python 3(精通 Python 3 程式設計)
另一本 Python 中文入門書,比《深入淺出》難一點但比較像常規的教科書。
“Programming in Python 3” 2nd, Mark Summerfield. Addison-Wesley, 2009.11
Learning Python
雖然名稱看起來很像是 Python 的入門書,但它的篇幅已經來到 1600 頁,實在無法推薦給初學者。它在一本書內把 Python 幾乎所有語言特性都說清楚,同時考慮到 Python 2 和 3 版本。當你想要了解,例如 MRO 的順序、何謂 unbounded, bound method,這本書詳細的程度不會讓你失望,只怕你沒空讀。
我當初看的是這一本 3ed 中文版(現已絕版),那時還沒有考慮 Python 3。
Python Cookbook(Python 的錦囊妙計)
這本不是入門書但很適合深入了解 Python,並讓自己的程式碼寫得更 Pythonic。裡面介紹了很多寫法慣例 idioms,同時也有中文版。非常值得在未來比較懂 Python 時買來看。
作者之一 David Beazley 是 PyCon TW 2013 的 Keynote。他平常就是專門教 Python 的講師,他在 PyCon 講過的「所有 talk 與 tutorial」,如 concurrency, packaging, async io
等等都值得一看。
“Python Cookbook” 3ed, David Beazley and Brian K. Jones. O’Reilly, 2013.05
Fluent Python(流暢的 Python)
當它是詳細、擴充版的 “Python Cookbook”,實際上書中也常常引用 David 的話。講述更多 Python 初介紹時不會深談的語言特性。如:MRO, Mixin, decorator, closure, metaprogramming
每章最後的 Future Reading 與 Soapbox 旁徵博引,除了更細節的參考資料,還有當初 Python 為何如此設計等考量與討論的歷史、發展、與各語言比較。非常適合做為邁向 Python core developer 的參考書。
“Fluent Python”, Luciano Ramalho. O’Reilly, 2015.07
MOOCs
關於 MOOCs 我有看過 Codecademy Python Track 以及 Coursera “An Introduction to Interactive Programming in Python” 這兩門課。我覺得最大的缺點就是講 Python 2.7,Python 3.x 的好用功能與差異都沒提;再來講課的 code 範例並不是使用 idiomatic Python syntax,在初學就沒養成好習慣與慣用語法有點可惜。
學習目標
  • 打開自己 Linux 裡的 Python3,跟著學習用的參考資料動手操作。用 REPL 以及運行腳本兩種方法來執行 Python 程式。
  • 學習使用 pip 和 venv (virtualenv) 來管理 Python 套件與環境。

  • youtube-dl 是一個用來下載 Youtube、Crunchyroll 等各大影音串流網站影片的工具。除了用 Linux 的套件管理工具安裝它,它其實是個用 Python 寫成的套件。為了避免跟 Linux 系統環境相衝,請開一個 Python 虛擬環境,並在裡面用 pip 安裝它。

    • Note: youtube-dl 除了單純做下載串流檔之外,還支援轉檔、封裝、後製等影像處理,這需要 libav 或 ffmpeg 任一影像處理套件。在 Debian 系列的 Linux 上 libav 會好裝一點。
  • 用 Python 解決一些實驗室會碰到的 Bioinfo 問題。有個網站 Rosalind 出了一系列的題目,我選了一些讓各位練習,請參考附錄 1



複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們職位招聘本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-3-28 17:44

回頂部