用python寫程序時,怎麼知道我想實現的功能有沒有現成的函數?

用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 提出的搜索關鍵詞有更好的建議。

我認為題主所說的是在不知道 numpy 這個東西和 matplot 這個東西的情況下怎麼搜索。

我認為應該搜的是 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分鐘就有人解答 問的太低端還會一堆負箭頭 呃呃呃


推薦閱讀:

python爬蟲如何深入學習?

TAG:Python | 編程 | Python庫 | Python入門 |