python学习的库

作者:追梦人物
链接:https://www.zhihu.com/question/22100190/answer/133327399
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

先放个牛逼的学习资料:Python 3 Module of the Week,中文名《每周一个 Python 3 模块》。作者几乎实践了一遍全部标准库,并为每一个 API 补充了一段代码示例,可以和官方文档相互补充来看。

学习 python 文档的原则就是:熟悉常用库的大部分常用API。

我最近花了一个多月时间读了几遍这些库的文档,从此之后感觉写 python 代码轻松多了。

string:包含各种简单的字符串处理方法,对于简单的字符串处理操作使用这里面的方法即可,不要动不动就写个正则表达式。

re:字符处理终极模块。好好掌握正则表达式语法,掌握里面的几个匹配方法,掌握 Match Object 的用法,捕获组的用法等。需要指出的是如果能用 string 模块处理的就尽量不用正则表达式,杀鸡不用牛刀。

datetime,calender:我对于涉及时间处理的情况倒不多,一般就是获取一下当前时间,根据时间的字符串构造 datetime 对象,格式化时间输出等,因此掌握其常用的几个对象和方法即可。

math,random,statistics:非专门的数学程序偶尔也会涉及一点数学运算,这几个模块提供了最基本的数学运算方法。了解里面提供了哪些开箱即用的方法不至于让我们在遇到基本的数学运算时束手无策或者重新发明轮子。当然专门的数学计算我会使用 numpy,pandas 等。然而掌握标准库的基本模块同样很重要,你不会想为了一个简单的需求而不得不去安装一个 numpy。

itertools,operator:itertools 是一个十分重要的模块。直到我某天遇到它才发现我以前一直在傻逼地重复造轮子,比如求排列组合等。虽然 tertools 里面的方法自己写也用不了几行代码,但别人既然已经写好了干嘛不用?operator 只求掌握两个方法 itemgetter 和 attrgetter,这给排序带来极大便利。虽然也可以用 lambda 表达式代替,但是用这两个方法更加 pythonic ,且对于大量元素排序其性能会略有提升。而该模块的其他方法大部分似乎都是我们常用内置操作符的函数版本,了解即可。

pathlib,glob,fnmatch:简单的目录处理使用 glob 和 fnmatch 即可,这两个模块十分简单,只有几个 API 即完成大部分目录处理和文件名匹配功能。而 pathlib 则提供了一整套面向对象常用和不常用的目录处理 API,异常强大方便。值得一提的是如果你不是因某些原因非得使用 py2 的话,我强烈建议直接使用 py 的最新发布版本(目前是 py3.5),py3 的很多高级特性和新引入的标准库障相比 py2 会省事很多,例如 pathlib 就是 py3.4 才引入。目录处理 py2 参阅 os.path

sqlite3:为了防止杀鸡用牛刀的情况准备。有时候我们会遇到一点简单的数据库需求,你肯定不想为了仅仅存那么一点数据而花费大量时间去配置一个 mysql 或者其他大型的数据库服务。sqlite 内置于 python,开箱即用,异常方便。另外你不用过于担心性能问题,我相信一般的需求都没有到考虑 sqlite 性能的地步。我曾用 sqlite3 处理过 40GB 的数据,和 mysql 不相上下。

threading,multiprocessing,concurrent.futures:有时候涉及到大量 io 处理或者运算处理,程序显得有点慢,用这几个模块改造一下程序,使其多线程或者多进程运行会显著提高程序运行效率。

json:处理 json 编码解码也是常用需求,这个模块非常简单,10分钟可以看完其 API。

utllib.request,urllib.response,urllib.parser,urllib.error,http.cookies,http.cookiesjar:写小爬虫脚本使用到的库。虽然面对 requests 库这几个库都该 deprecated,但是了解这几个库的使用方法有助于我们更好地理解 requests 库是如何工作的以及让我们体会到为什么人们感激 requests 库的作者。另外 html 解析方面 beautifulsoup 推荐一看。我的需求就是写点简单小爬虫脚本从互联网爬一些数据。专业的爬虫可求助常用的爬虫框架。

此外我是做数据科学的,列举几个科学计算的标准库:numpy,scipy,pandas,matplotlib,各大机器学习库(但我不搞机器学习,所以也不是很清楚。)

这么多模块不可能完全记住其全部 API,我们要做到的就是当遇到某个需求时马上回想起某个模块的某个函数可以解决该问题,然后迅速订阅到文档查阅其使用方法。另外多看别人写的优秀代码有助于提高个人写代码的姿势,不鼓励重复造轮子但鼓励重复拆轮子,研究轮子然后造全新的轮子。

手机码字,暂时说这么多。本人也是一个被 python 的优雅吸引的小菜鸟,望能和 pythoner 们不断交流学习。

补充一点:看到一些回答不鼓励系统地学习文档,但从我个人学习编程体会来看,并不十分同意。学习过但不记得了和从没学习过绝对是两回事。我初学 python 的时候也是践行着边用边查的原则,遇到一个需求就百度或者 google,这往往都能搜索出解决方案。但是这些搜到的资料有一些缺点,比如已经过时,或者限于作者本人的知识,给出的有时候不一定是最佳解决方案,或者你用他的代码解决了问题,但是由于不明白其原理,遇到坑不知道如何解决,最终还得回去读官方文档。官方文档好处是权威,而且文档中会包含着这个作者对这个模块设计的理念,这些对从网上搜索的资料来说是没有的。此外,除非是那种超大型的库,一般通读一遍其官方文档一般也就几个小时,读一遍是绝对值得的。我现在根据经验总结出来的我认为最好的做法是:在使用任何一个模块之前,先通读一遍其官方文档,了解其为我们提供了哪些 API,之后在实际编程的过程中遇到了相关需求,就针对这个需求再去查阅文档,如果文档说的不够详细,再 google 网上的一些代码示例。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值