2023 年 9 月¶
使用 pyflyby 自动管理导入包
在编写 Python 代码时,尤其是在构建复杂的项目时,你是否遇到过这些问题:
-
忘记
import某个包了; -
import了很多包,但不知道哪些是可以删掉的?
在 Python 开发过程中,我们经常需要导入一些第三方包或自定义的模块。但是,手动导入这些包和模块有时候会变得非常繁琐和冗长。由 D. E. Shaw group 贡献的开源工具 pyflyby 可以自动为我们管理这些导入,帮助我们轻松解决这些问题!

Python @lru_cache 内置 LRU 缓存
Python 内置模块 functools 的一个高阶函数 @lru_cache 是一个为函数提供缓存功能的装饰器,缓存 maxsize 组传入参数,在下次以相同参数调用时直接返回上一次的结果。用以节约高开销或 I/O 函数的调用时间。
在递归计算斐波那契数列的第 30 项时,使用 @lru_cache 可使速度提升约 400 万倍。

Pandas 向前与居中滚动计算
Pandas 中的 rolling 默认是向后(也就是向上)获取滚动窗口,如果需要向前(也就是向下)或者居中(也就是同时向上和向下)获取滚动窗口,则可以分别使用 pd.api.indexers.FixedForwardWindowIndexer 和 center=True 来实现。
本文还使用了 .shift(-1) 实现向前或者居中获取滚动窗口,并对比了这种方法与上述方法所得结果的差异。
| data | forward_using_FixedForwardWindowIndexer | forward_using_shift | center_using_center | center_using_shift | |
|---|---|---|---|---|---|
| 0 | 1.0 | 3.0 | 3.0 | 3.0 | 3.0 |
| 1 | 2.0 | 2.0 | 2.0 | 3.0 | 3.0 |
| 2 | NaN | 4.0 | 4.0 | 6.0 | 6.0 |
| 3 | 4.0 | 9.0 | 9.0 | 9.0 | 9.0 |
| 4 | 5.0 | 5.0 | NaN | 9.0 | NaN |
计算机教育中缺失的一课:The shell
大学里的计算机课程通常专注于讲授从操作系统到机器学习这些学院派的课程或主题,而对于如何精通工具这一主题则往往会留给学生自行探索。在这个系列课程中,我们讲授命令行、强大的文本编辑器的使用、使用版本控制系统提供的多种特性等等。学生在他们受教育阶段就会和这些工具朝夕相处(在他们的职业生涯中更是这样)。
因此,花时间打磨使用这些工具的能力并能够最终熟练地、流畅地使用它们是非常有必要的。
精通这些工具不仅可以帮助您更快的使用工具完成任务,并且可以帮助您解决在之前看来似乎无比复杂的问题。

