如何学会寻找

找 module/package

package 是 Python 这类编程语言世界中的 App软件,我们完成一个项目、产品,一般要用到不少第三方的 package
几乎每种编程语言,在其生态发展的过程中,都会出现 包管理 的平台。
Python 有 PyPI (The Python Package Index) , 网址为 https://pypi.org/。PyPI 上可以直接搜索 package,但却不是一个基于用意去检索的好地方,因为它上面的内容太多了,权重难分,几乎所有 Python 第三方的 pacakge 都在上面,如其名 Index,是一个索引性质的。
有时,因为某个特定的需求,可以试试先直接在 PyPI 上搜索,说不定会有需要的结果产生,或者从有限的结果中,看其 package 的介绍作为一种线索,然后进一步找到其它关联的信息,比如原作者的 Github 地址、其所参考的其它开源项目的链接。

另外一个宝库就是 Github 了,网址为 https://github.com/,多数时候,我们能在上面找到自己需要的。
一般情况下,我们需要指定 LanguagesPython,并要根据 Stars 的数量粗略判断 repo 的质量。但这也不是唯一的标准,有些时候未必如下图有这么多可选的,甚至找不到基于 Python 的解决方案,那么就要参考已有的内容,其最核心的技术是怎么实现的,参考之后自己用 Python 写一个就可以了。

小贴士: 如何使用 pip 安装 Github 上的 repo(仓库) 呢?
一般具体的 repo 内都提供了安装的说明,如果没有的话,也可以直接尝试使用 pip 进行安装,pip 可以直接针对某个 zip 文件进行 package 安装,只要运行 pip install repo的ZIP文件的URL 就可以了。而 repo 的 ZIP 文件 URL 可以通过下面的方式获得:

还有一点必须要注意,随着你的技术线路逐渐深入,会遇到一些少人问津的 repo,或者历史太久很多代码需要重新梳理一遍,直接使用 pip 还未必能正确安装 package,那就要靠自己来解决这个问题,有些可能还只是特定发行版的 Linux 上的解决方案。总而言之,一个 repo、一个开源的项目,在 如何安装 上,未必都是友好的呀。

另外非常重要且需要注意的: 开源项目,要看其 License,开源也是基于一些条件下的开源,比如 GPL 协议,意味着你使用了它,那么你的代码也要遵守 GPL 协议进行开源。

找解决办法

https://github.com/vinta/awesome-python 这个项目罗列了不少场景下的 module 选择,如果从未接触过 (某个领域的) 相应解决方案,可以先从这里了解。
https://google.com 是比较万能的,但也意味着搜索的时候要多费点精力,有些未必那么容易找到需要的信息。当然了,如果越容易找到答案的,反而说明当前能力还停留在 『面向 Google 编程』的阶段。至于中文的搜索引擎,用用也没有关系呀,不少基础知识是能找到的,不用有太大的偏见;但真正遇到不易解决的问题时,请使用英文搜索,这是写代码必然要面对的现实,毕竟,我们用的是 if else 而不是 如果 其它

Google 除了找解决方案之外,也常用来找解决办法。方案偏向于宏观,方法偏向于微观,比如具体的 bug 怎么解决的方法
相信在使用 Google 解决一些 bug 的过程中,你会遇到很多来自于 https://stackoverflow.com/ 的内容。
『面向 Google 编程』还是『面向 StackOverflow』编程,都是不错的选择。如果真的直接抄代码,也不是不可以,但是不要瞎抄,知其然更重要,而且有些别人的解决方法完全有改善的地方。

看源码

除了 搜索 这个技能之外,还要 浸染
搜索得来,最弱的是『搬运工』,完全是外物。然后就是 『水泥匠人』的角色,可以将素材堆到更高的高度。再之后是『建筑师』,脑海中始终有蓝图。
特别对于入门者而言,浸染的过程,可以帮我们从『搬运工』走到『水泥匠人』。
实现这个转变的过程很简单,就是去 看源码,这里的 不像本课程最开始的
读,是泛读,读代码的意义我个人认为不大,终归不是读书。看,是细看,看代码的意义在于『必须要去看』,要有目的的去,因为你需要解决问题,才不得不看。

简单的来说,两种方式:

  1. PyCharm 内,自己需要了解某个函数、某个类的用法、实现方式,那么 Command 按住,再用鼠标左键点击,就可以跳到对应的源代码了(如果支持的话)。有时候还因为要解决 bug,因为第三方 package 也是有 bug,不看源码,肯定无法解决。
  2. 在 Github 上搜源代码,搜索的范围不是 Repositories,而是 Codes;也可以进入某个具体的 repo 按需搜索源码的关键字。如此,可以高效地获得别人解决问题的思路,甚至现成的成果。