大公司的Python高手都在用的库|你不知道就out啦

栏目: Python · 发布时间: 6年前

内容简介:大公司的Python高手都在用的库|你不知道就out啦

很多小伙伴让我写 Python 进阶技巧的文章,其实Python的进阶我觉得主要在对一些库的熟练使用,另外对代码的驾驭能力,个人觉得比较好的方法多看库,然后多读GitHub 上的源码,对你的进阶之路大有裨益!今天就来分享几个我平时非常喜欢的库,并详细举例说明,希望对大家有帮助!

工具:Sublime Text

语言:Python3.6

高手必知的库:

  • collections

  • concurrent

  • logging

  • argparse

我最喜欢的collections库

大家知道Python里面的字典虽然好用,但是有两个显著的缺点,其中之一就是无序,如何在构造字典的时候,让字典里面填入的内容有序呢,一般的方法都是等字典的内容填充好了之后,用sorted排序,但是sorted,也并不能保证是按照添加的顺序进行迭代

痛点1:字典无序的问题

有没有办法让字典出生的时候就是带序的,有的就是collections库里面的OrderedDict,传统的字典输出的时候,有时会乱序

大公司的Python高手都在用的库|你不知道就out啦

>>{'A': 0, 'B': 1, 'C': 2, 'E': 4, 'D': 3}

如果我们想按照字典加入的顺序输出,必须用OrderedDict

大公司的Python高手都在用的库|你不知道就out啦

OrderedDict会自动按照加入的顺序打印,但是这样做的坏处是开销很大,因为它内部维护了一张双向链表,大小是普通字典的2倍.

痛点2:字典无缺省值的问题

字典一般都是没有缺省值的,比如我们在爬虫的时候,我们希望我们爬取的关键字如果爬到有值则填入内容,如果没有则用缺省值代替.

比如我前段时间做的年度电影榜单(2017年度电影榜单出炉),keys=['movie_name','movie_link','rating_num','rating_people_num']

初始化这样的字典有三种方法:

大公司的Python高手都在用的库|你不知道就out啦

但是上面3种解决方案有缺点:

  • 比如我们访问一个不存在的key的时候,如何让它返回一个缺省值 ?

  • 比如复杂一点数据结构,字典里面有列表,而不是一个简单的字符串?

  • 这些问题如何优雅的解决,用神器defaultdict

比如我们构造一个学生的成绩单,缺省值我们认为是60分:

大公司的Python高手都在用的库|你不知道就out啦

如果我们要获取一个不在名单里面的学生成绩

print (students['sam'])

>>60 #输出是60

我们打印一些看看学生的成绩,是不是非常方便

print (students)

>>{'lili': 100, 'jack': 80, 'tom': 70, 'sam': 60})

如果我们是一个字典嵌套集合的数据结构,我们只要把这个字典缺省设为set,然后只要管如何添加数据就行,不用操心如何初始化字典:

大公司的Python高手都在用的库|你不知道就out啦

痛点3:像类一样玩转元组数据

比如我们有一个数据结构students = (name, score, weight)

我们要访问这个元组,需要通过下标去访问,非常不方便,如果这个元组很长,用下标会弄错,而且乱序之后不易扩展

如果用一个类去构建,有点杀鸡用牛刀的赶脚!这个时候用namedtuple就有一种妙不可言的感觉,太方便了,可以体会一下Python之美.

大公司的Python高手都在用的库|你不知道就out啦

然后我们访问这个属性,可以用类似类的访问属性方式去访问

print (s1.name)

print (s1.score)

print (s1.weight)

>>

Leo

100

65

简单而强大的并发库concurrent

痛点4:如何简便的用并发

我们在爬虫的时候,如果有100个url需要并发去爬取,一种通用的做法是开多线程,然后把100个url放入队列里面,开多线程从共享队列里面取url并发爬取,有没有更简便的方便,有的用concurrent库.

比如:我们有一个需求是要爬取百度,头条,知乎,豆瓣,新浪和搜狐的首页.

我们看用concurrent里面的线程池如何轻松解决

大公司的Python高手都在用的库|你不知道就out啦

>>

url:http://www.baidu.com length:2381

url:http://www.toutiao.com length:7137

url:http://www.jianshu.com length:48378

url:http://www.taobao.com length:126311

url:http://www.douban.com length:91297

url:http://www.sina.com length:605568

url:http://www.sohu.com length:191148

直接用ThreadPoolExecutor一个线程池的管理器来负责,thpool(max_workers=4)来创建一个线程池,你可以自己定义多个线程一起并发,然后用submit来往线程池里面添加task,是不是很简便!

全能的日志库logging

痛点5:日志怎么打才好

在做大一点的项目的时候,有3个地方需要考虑:

第一:代码架构的扩展性和维护性,主要会用一些 设计模式 来重构

第二:代码的稳定性,会加很多异常保护

第三:就是头疼的debug的日志,需求既要灵活,功能又要全面

单一的print非常lower,为了解决这个痛点,我们必须用logging模块

大公司的Python高手都在用的库|你不知道就out啦

>>这个时候我们去看一下mylog.log文件就会发现,里面把这5条信息都记录下来了

CRITICAL:root:This is a critical message

ERROR:root:This is an error message

WARNING:root:This is a warning message

INFO:root:This is a info message

DEBUG:root:This is a debug message

logging里面有5个级别critical>error>warning>info>debug

debug是最低的,我们上面在basciConfig里面设置的是低优先级的DEBUG,如果我们改成WARNING,那么就只显示warning以上的级别(含warning)

如果我们想输出的日志里面加时间戳,怎么办,简单的在basicConfig里面设置一下format格式就ok了

%(levelname)s: 打印日志级别名称

%(asctime)s: 打印日志的时间

%(message)s: 打印日志信息

大公司的Python高手都在用的库|你不知道就out啦

多面的命令行解析库

痛点6:解决命令行解析多选项问题

如果有做命令行的同学,或者是自动化脚本的对argparse一定不陌生,这个一个非常重要的库,可以对命令行提供强大的各种选项功能

比如新建一个demo.py ,我们希望这个小脚本可以对两个数运算

大公司的Python高手都在用的库|你不知道就out啦

我们在命令行下敲一下:

xindeMacBook-Pro:HiPython xin$ python3 demo.py -h

usage: demo.py [-h] [-t T] [-n1 N1] [-n2 N2]

calculate two numbers

optional arguments:

-h, --help show this help message and exit

-t T add/mul

-n1 N1 First num

-n2 N2 Second num

  • -h立马就把各个选项的用法一目了然

  • -t 表示你运算类型

  • -n1表示第一个数

  • -n2表示第二个数

输入add作加法运算:

xindeMacBook-Pro:HiPython xin$ python3 demo.py -t add -n1 10 -n2 20

10.0+20.0=30.0

输入mul作乘法运算:

xindeMacBook-Pro:HiPython leoxin$ python3 demo.py -t mul -n1 10 -n2 20

10.0*20.0=200.0

结论:

所有的高手都是从菜鸟一步一步走过来的,不断的吸取养分,保持如饥似渴的学习热情,多思考,总有一天菜鸟会展翅高飞成为一代高手! Python的实践性非常强,希望上面几个库可以给大家一些思路和参考,我们继续前行.

End.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

老码识途

老码识途

韩宏 / 电子工业出版社 / 2012-8 / 56.00元

《老"码"识途:从机器码到框架的系统观逆向修炼之路》以逆向反汇编为线索,自底向上,从探索者的角度,原生态地刻画了对系统机制的学习,以及相关问题的猜测、追踪和解决过程,展现了系统级思维方式的淬炼方法。该思维方式是架构师应具备的一种重要素质。《老"码"识途:从机器码到框架的系统观逆向修炼之路》内容涉及反汇编、底层调试、链接、加载、钩子、异常处理、测试驱动开发、对象模型和机制、线程类封装、跨平台技术、插......一起来看看 《老码识途》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具