Python

Python Typing

最近看到有人在某乎上吐槽Python越来越卷,一个动态脚本语言开始用typing做静态类型检查。这个说法很哗众取宠。毕竟现在的Python已经不是十年前的Python,不只用于爬虫、运维和数据处理这些传统“脚本”类开发,也逐渐的在各种互联网软件、中间件和客户端开发中扮演重要角色(这部分开发过去是Java, C#,C++的地盘)。
Read more

From Generator to Coroutine

现代编程语言标准库中使用接口、抽象类和具体类来组成容器和迭代体系,Python也不例外。本文从Python容器和迭代的Type Hints入手,引出生成器Generator,最后介绍“听上去与迭代毫无关联”的协程Coroutine是怎么变成生成器Generator的“儿子”。
Read more

Python测试开发1 - fixture

资深开发者实际时间分配有可能是4分调研+设计,3分编码,3分测试。且越是老鸟,测试比重越高。测试下功夫了,质量就到位了,返工次数少,调试难度低,工效KPI也就高了。本文分享Python测试开发中的一些心得。
Read more

通过环境变量加载配置

启动时,程序读取配置有几种方法: 把配置文件作为参数传给程序 程序从配置服务器读取配置参数 通过环境变量载入参数 第三种方法,由于简单方便,兼容性高,无需依赖其他基础设施,常作为中小型程序首选方法。本文分享几个使用环境变量的经验。
Read more

Python包引用规则

python有package和module两种概念。package是一个文件夹(包含__init__.py文件的文件夹),module是一个文件。module中引用其他package和module时,通过语法import A或者from A import B完成。import的引用又可以分为绝对引用和相对引用两种:
Read more

在循环中使用lambda

谈到函数式编程,必然会提到lambda。lambda使得高阶函数运算用起来得心应手。而谈到lambda就要提到闭包。闭包将lambda和它运行时依赖“环境”连接在一起。用一个简单python代码来描述lambda和闭包:
Read more

在Scrapy中使用cookie

Python有一个很出色的爬虫包scrapy,架构清晰,设计精巧,能想到的爬虫工具需要的定制化点都有对应的扩展机制。 大部分网站都使用cookie来记录访问用户的识别信息。每个请求都会把用户识别信息带回到服务器,帮助后台程序识别独立用户,这样可以进行鉴权,反爬,限流等很多的操作。所以对于爬虫来说,如何模拟和使用cookie“欺骗”服务器,是十分重要的一步。本文就介绍如何在scrapy中使用cookie技术。
Read more

Streaming Pipeline in Python - 2

除了上一篇文章中提到的几个问题,在使用Generator Expression的过程中,还遇到了一个bug。
Read more

Streaming Pipeline in Python - 1

最近用python 2.7做数据处理。数据说大不大,说小不小,千万级别。显然用Hadoop是大材小用。可由于每笔数据都是一个很大的json对象,处理起来很耗内存。单机加到8GB,依旧会出现OOM。不过还好此类问题有成熟的解决方案“流水线式的数据处理”:每次从文件读一笔记录数据,处理一笔数据,把处理结果持久化,相应的对象实例(内存)被回收。方案成熟易实现。先把代码列在下面,然后再解释其中遇到的坑。
Read more