使用 yield 压平嵌套字典有多简单?
我们经常遇到各种字典套字典的数据,例如:
1 | nest_dict = { |
有没有什么简单的办法,把它压扁
,变成:
1 | { |
我们经常遇到各种字典套字典的数据,例如:
1 | nest_dict = { |
有没有什么简单的办法,把它压扁
,变成:
1 | { |
写过一段时间代码的同学,应该对这一句话深有体会:程序的时间利用率和空间利用率往往是矛盾的,可以用时间换空间,可以用空间换时间,但很难同时提高一个程序的时间利用率和空间利用率。
但如果你尝试使用生成器来重构你的代码,也许你会发现,在一定程度上,你可以既提高时间利用率,又提高空间利用率。
说到安装 Python 的第三方库,会 Python 的同学都知道,在终端使用pip install xxx
即可。
那么如果我想在代码里面安装第三方库怎么办呢?可能有人想到使用 os
模块:
1 | import os |
这种方法确实可行,并且即使你在虚拟环境中使用这种方式安装,也确实不会安装到系统的 Python 环境中。
我们在开发的过程中,会创建非常多的日志,对日志进行 rotate 是一个基本要求。
所谓的rotate
,可以理解为对日志按照一定的规则进行切分。例如,每天晚上0点生成一个新的日志文件,并把老的文件归档。又或者每个日志文件超过多少 MB 以后就自动切分,并把老的内容单独存档或者压缩。存档以后的日志文件保存多少个。超过数量以后先删除老日志再删除新日志。
如果我们使用的是 Python,那么我们可以使用自带的logging
模块或者第三方的logoru
来写日志。但如果我们使用像是 MongoDB这种第三方的软件,那么要对日志进行 rotate 就非常麻烦了。如果不加以管理,MongoDB 的日志很容易就达到几十GB。
还有其他软件,他们的日志散落在系统的各个位置,我们应该如何替他们 rotate 呢?
假设有一个 Redis 集合,里面有 N 条数据,你不停从里面lpop
数据,直到某一条数据的值为'Stop'
字符串为止(已知里面必有一条数据为'Stop'
字符串,但其位置不知道)。
我们平时导入第三方模块的时候,一般使用的是import
关键字,例如:
1 | import scrapy |
但是如果各位同学看过 Scrapy 的settings.py
文件,就会发现里面会通过字符串的方式来指定pipeline 和 middleware,例如:
1 | DOWNLOADER_MIDDLEWARES = { |
我们知道,这里的Test.middlewares.ExceptionRetryMiddleware
实际上对应了根目录下面的Test
文件夹里面的middlewares.py
文件中的ExceptionRetryMiddleware
类。那么 Scrapy 是如何根据这个字符串,导入这个类的呢?
请大家猜一猜下面这段代码的运行效果:
1 | import random |
你是不是以为这段代码运行以后,结果如下图所示?
但实际上,我可以让输出结果根据我的意愿随意变动,例如像下面这个 gif ,所有输出结果都是我:
你可以先不要往下看,放下手机,自己写一下代码,试一试 如何才能实现 gif 中的效果。
在我们使用 Python 查询 MongoDB 的时候,一般会使用MongoDB 的集合(collection)对象的 find()
方法或者find_one()
方法:
1 | import pymongo |
其中,find()
方法返回的是一个游标对象,我们可以直接对这个对象进行迭代,从而按顺序获取每一条数据。
你的代码是如何被炫技毁掉的?
Jupyter 是数据分析领域非常有名的开发环境,使用 Jupyter 写数据分析相关的代码会大大节约开发时间。
设想这样一个场景:别的部门的同事传给你一个数据分析的模块,用于实现对数据的高级分析。模块里面有上百个函数。