super 没那么简单

2017-01-17
阅读 5 分钟
4k
在开始之前我们来约定一下本文所使用的 Python 版本。默认用的是 Python 3,也就是说:本文所定义的类都是新式类。如果你用到是 Python 2 的话,记得继承 object:

Python: 多继承模式下 MRO(Method Resolution Order) 的计算方式

2016-11-29
阅读 4 分钟
3.6k
大家可能已经知道了,在 Python 3(Python 2 的新式类)中多继承模式是使用 C3 算法来确定 MRO(Method Resolution Order) 的。

threading + multiprocessing + logging = 死锁 ?

2016-10-25
阅读 4 分钟
6.4k
当创建子进程的时候,后台线程中的 logging 模块正好获取了一个锁(threading.RLock)在记录日志信息。由于在 unix/linux 平台下 Python 是通过 fork 来创建子进程的,因此创建子进程的时候会把 logging 中的锁也复制了一份,当子进程中需要记录日志的时候发现 logging 的锁一直处于被占用的状态,从而出现了死锁(复制的...

捕获异常然后再抛出另一个异常的正确姿势

2016-09-07
阅读 7 分钟
5k
不知道大家有没有注意到这样抛出异常的方式有一个很严重的问题,那就是 在重新抛出另一个异常的时候,捕获的上一个异常的 traceback 信息丢失了(python2): :

让我们一起来构建一个模板引擎(四)

2016-06-05
阅读 6 分钟
2.8k
在 上篇文章 中我们的模板引擎实现了对 include 和 extends 的支持, 到此为止我们已经实现了模板引擎所需的大部分功能。 在本文中我们将解决一些用于生成 html 的模板引擎需要面对的一些安全问题。

使用 exec 函数时需要注意的一些安全问题

2016-05-20
阅读 5 分钟
6k
在 exec 执行的代码中,默认可以访问执行 exec 时的局部变量和全局变量, 同样也会修改全局变量。如果 exec 执行的代码是根据用户提交的数据生产的话,这种默认行为就是一个安全隐患。

Python 探针实现原理

2016-04-07
阅读 6 分钟
6.9k
本文将简单讲述一下 Python 探针的实现原理。 同时为了验证这个原理,我们也会一起来实现一个简单的统计指定函数执行时间的探针程序。 探针的实现主要涉及以下几个知识点: sys.meta_path sitecustomize.py sys.meta_path sys.meta_path 这个简单的来说就是可以实现 import hook 的功能, 当执行 import 相关的操作时,会...

让我们一起来构建一个模板引擎(三)

2016-04-01
阅读 9 分钟
3.2k
在 上篇文章 中我们的模板引擎实现了对 if 和 for 对支持,同时在文章的最后我给大家留了一个 问题:如何实现支持 include 和 extends 的标签功能。

让我们一起来构建一个模板引擎(二)

2016-03-25
阅读 9 分钟
2.9k
在 上篇文章中我们的模板引擎实现了变量和注释功能,同时在文章的最后我给大家留了一个 问题:如何实现支持 if 和 for 的标签功能: {代码...} 在本篇文章中我们将一起来实现这个功能。 if ... elif ... else ... endif 首先我们来实现对 if 语句的支持。 if 语句的语法如下: {代码...} 我们首先要做的跟之前一样,那就是...

让我们一起来构建一个模板引擎(一)

2016-03-21
阅读 8 分钟
3.7k
这种方案有一个很明显的问题那就是,需要拼接两个 html 片段。 使用过模板技术的同学应该很容易就想到,在 Web 开发中生成 HTML 的更常用的办法是使用模板: