snake - python入門




Python進程路徑-從學徒到專家 (13)

學習算法/數學/文件IO / Pythonic優化

這不會讓你成為上師,但要開始,嘗試解決項目歐拉問題 。如果你有體面的高中數學知識,並且知道如何去Google,前50名左右的人不應該為此付稅。 當你解決這個問題時,你可以進入論壇,在那裡你可以查看其他人的解決方案,這些解決方案將會教你更多。 雖然體面,但不要張貼您的解決方案,因為這個想法是鼓勵人們自己解決問題。

如果你使用蠻力算法,強迫自己在Python中工作將是無情的。 這將教你如何在內存中佈置大型數據集,並通過字典等快速語言功能高效地訪問它們。

從我自己做起,我學到了:

  • 文件IO
  • 算法和技術,如動態規劃
  • Python數據佈局
    • 字典/包含HashMap
    • 清單
    • 元組
    • 它們的各種組合,例如詞典到元組列表
  • 發電機
  • 遞歸函數
  • 開發Python庫
    • 文件系統佈局
    • 在翻譯會議期間重新加載它們

而且非常重要

  • 何時放棄和使用C或C ++!

所有這些都應該與生物信息學有關

誠然,我沒有從這個經驗中了解Python的OOP特性。

我一直在學習,工作和使用Python一年半。 作為一名慢慢轉向生物信息學的生物學家,這種語言一直是我在實驗室做出的所有主要貢獻的核心。 我或多或少地愛上了Python允許我表達美麗解決方案的方式,以及語言的語義,這種語言允許從思想到可行代碼的自然流動。

我想知道的是你對這個或其他論壇中很少見到的問題的回答。 這個問題對於我來說對於Python改進途中的任何人來說似乎都是重中之重,但是誰不知道他的下一步應該是什麼。

讓我總結一下我不想先問的問題;)

  • 我不想知道如何快速學習Python
  • 我也不想找出熟悉這門語言的最佳途徑
  • 最後,我不想知道“一舉兩得”的方法。

我想知道你的意見是:

你會推薦給一個Python熟練人員的步驟,從學徒到專家身份(隨時隨地停止,無論你的專業知識是什麼),以便持續改進,成為一個更好,更好的Python編碼器,一步一個腳印。 SO上的一些人幾乎看起來值得他們的Python能力崇拜,請賜教:)

我會喜歡的那種答案(但可以讓讀者感到驚訝:P)的格式或多或少是這樣的:

  • 閱讀這個(例如:python教程),注意那種細節
  • 代碼如此之多/問題/代碼行
  • 然後,閱讀這個(例如:這本或那本書),但這一次,請注意這一點
  • 解決一些現實生活中的問題
  • 然後,繼續閱讀Y.
  • 一定要把握這些概念
  • 代碼為X時間
  • 回到諸如此類的基礎知識或進一步轉向......
  • (你明白了:)

我真的很在意在不同階段知道你應該注意什麼,以便持續發展(當然有適當的努力)。 如果您來自特定的專業領域,請在此領域討論適當的路徑。

編輯:感謝你的偉大的輸入,我回到了Python的改進軌道! 我真的很感激!


徹底了解所有數據類型和結構

對於每種類型和結構,編寫一系列演示程序,用於演示類型或數據結構的各個方面。 如果你這樣做,可能值得每個人都寫一篇博文......這可能對很多人有用!


理解反省

  • 寫一個dir()等價物
  • 寫一個type()相當於
  • 弄清楚如何"monkey-patch"
  • 使用dis模塊來查看各種語言結構如何工作

做這些事情會

  • 給你一些關於python如何實現的很好的理論知識
  • 在低級編程中給你一些很好的實踐經驗
  • 給你對python數據結構的直觀感受

下載Twisted並查看源代碼。 他們採用一些非常先進的技術。


你已經有很多閱讀材料,但是如果你可以處理更多的內容,我建議你通過閱讀Python增強建議,尤其是“完成”PEP和“延期,放棄,撤回和拒絕”來了解python的發展。政治公眾人物。

通過觀察語言如何變化,做出的決策和原理,您將吸收Python的哲學並理解“慣用Python”是如何產生的。

http://www.python.org/dev/peps/



如果你使用python進行科學研究(看起來你是這樣),其中一部分就是學習和理解科學圖書館,對我來說這些將是

  • numpy的
  • SciPy的
  • matplotlib
  • 編寫Mayavi / MLAB
  • 查科
  • 用Cython

知道如何使用正確的庫和向量化代碼對科學計算至關重要。

我想補充一點,用普通pythonic方式處理大數字數據集(面向對象的方法,列表,迭代器)可能效率極低。 在科學計算中,可能有必要以與大多數傳統python編碼器處理數據的方式截然不同的方式來構建代碼。


對開始學習Python的其他人進行教學始終是讓你的想法變得清晰的好方法,有時候,我通常會從學生那裡得到很多精彩的問題,讓我重新思考有關Python的概念。


我建議從某些事情開始,強迫您探索語法的表達力。 Python允許用許多不同的方式來編寫相同的功能,但通常有一種最優雅和最快的方法。 如果你習慣了其他語言的習語,你可能永遠不會找到或接受這些更好的方法。 我花了一個週末的時間熬過了20多個Project Euler的問題,並在Google App Engine上與Django做了一個簡單的webapp。 這只會讓你從學徒到新手,也許,但是你可以繼續製作更高級的webapps並解決更高級的Project Euler問題。 幾個月後,我回到了一個小時而不是一個週末,從頭開始解決了前20個PE問題。


我會給你提供我認為有人可以給你的最簡單最有效的建議: 代碼

你只能通過編碼更好地使用一種語言(這意味著理解它)。 你必須積極享受編碼,受到啟發,提出問題,並自己找到答案。

有一個小時的空閒時間? 編寫能夠反轉字符串的代碼,並找出最佳解決方案。 一個免費的晚上? 為什麼不嘗試一些網絡抓取。 閱讀其他人的代碼。 看看他們如何做事。 問問自己你會做什麼。

當我厭倦了我的電腦時,我打開了我的IDE和代碼風暴。 我記下那些聽起來有趣並且具有挑戰性的想法。 一個URL縮短器? 當然,我可以做到這一點。 哦,我學會瞭如何將數字從一個基地轉換為另一個基地作為副作用!

無論您的技能水平如何,這都是有效 你永遠不要停止學習。 通過在業餘時間積極編碼,您將不需要額外的努力就能理解語言,並最終成為專家。 你將建立知識和可重用的代碼並記住習語。




def apprentice():
  read(diveintopython)
  experiment(interpreter)
  read(python_tutorial)
  experiment(interpreter, modules/files)
  watch(pycon)

def master():
  refer(python-essential-reference)
  refer(PEPs/language reference)
  experiment()
  read(good_python_code) # Eg. twisted, other libraries
  write(basic_library)   # reinvent wheel and compare to existing wheels
  if have_interesting_ideas:
     give_talk(pycon)

def guru():
  pass # Not qualified to comment. Fix the GIL perhaps?






python