用python寫程序時,怎麼知道我想實現的功能有沒有現成的函數?
12-29
用python寫程序時,怎麼知道我想實現的功能有沒有現成的函數?
比如,我想求一個數組中的最大值,可以用numpy.max()又比如,我想畫矢量,可以用matplotlib.pyplot.quiver()可是我怎麼知道max()、quiver()這些函數存在不存在,要到哪裡找?
謝謝
剛學python的時候我有一個錯覺,其實我是靠stack overflow和google在編程。舉個例子,前幾天我寫的程序有個bug,就是運行程序的時候有一定幾率子進程陷入無法退出的狀態(hanging),我在google找了好久,才發現原來是subprocess這個庫本身的問題,當使用stdout = subprocess.PIPE的時候, 一旦子進程的output輸出超過2^16個character,這個subprocess就會無法退出,因為memory buffer已經滿了,子進程在一直等待這個buffer留出新的位置給之後的character,於是就無限的等下去了。這個解釋全是一個人寫在自己博客上的,沒找到這個我都要放棄治療了。而且雖然他發現了這個問題,subprocess這個庫也仍然沒有講到這個問題。地址:thraxil.org: Subprocess Hanging: PIPE is your enemy
我覺得是一個權衡問題了。比如為了找一個函數或者功能,結果在google上找了半天,而自己寫半個小時寫完了。對於一些大功能,大模塊,自己要寫幾天,那就到google github先找一找相關模塊。
google 之是對的,但是對 @Allen Paul 提出的搜索關鍵詞有更好的建議。
我認為應該搜的是 max value in array,以及 draw vector。前面加上關鍵字 python 直接去 google 搜就好了,都在第一頁。
如果不知道英文怎麼描述,可以先把中文單詞翻譯成英文去 google 搜,比如搜 python biggest number array,會出現 largest、greatest 等詞,而這些詞的答案又不約而同的指向了 max 關鍵詞。
多搜,漸漸的就知道怎樣用程序員化的語言描述一個功能或需求了。
還有說dir的……嘛dir也扛不住別人的metaclass。
為何不好好看看別人的模塊里的文檔、注釋,以及docstring呢?直接拿進來help一下都成。
如果連包存在與否都不清楚,建議先上github和pypi搜搜你所需要的功能是不是有人做了模塊發布了。本人只貼dir,還有help,以後得全部貼出來。
還可以直接看源代碼。老外的代碼,注釋寫太全面了。
dir 大法。In [1]: import numpy
In [2]: dir(numpy)
Out[2]:["ALLOW_THREADS", "BUFSIZE", "CLIP", "ComplexWarning", "DataSource","ERR_CALL",
"ERR_DEFAULT", "ERR_IGNORE", "ERR_LOG", "ERR_PRINT", "ERR_RAISE", "ERR_WARN", "FLOATING_POINT_SUPPORT", "FPE_DIVIDEBYZERO", "FPE_INVALID",太長了,沒有都貼出來。
官方文檔
我的經驗是用自動補全(.後面接補全鍵),基本可以靠函數名猜出功能,或者根據需求找有沒有對應的函數。所以用py最重要的技能之一就是正確用英文表達自己的困惑和需求,特別是使用正確的關鍵字,用上諸如filter, occur to, asyc等詞。要把問題發生的背景,最顯著特徵表達清楚。
上stackoverflow 最多15分鐘就有人解答 問的太低端還會一堆負箭頭 呃呃呃
推薦閱讀: