Python字典对象实现原理

字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1) : >>> d = {'a': 1, 'b': 2} >>> d['c'] = 3 >>> d {'a': 1, 'b': 2, 'c': 3} ...

more ...

Python列表对象实现原理

Python中的列表基于PyListObject实现,列表支持元素的插入、删除、更新操作,因此PyListObject是一个变长对象(列表的长度随着元素的增加和删除而变长和变短),同时它还是一个可变对象(列表中的元素根据列表的操作而发生变化,内存大小动态的变化),PyListObject的定义: typedef struct { # 列表对象引用计数 int ob_refcnt; # ...

more ...

Python字符串对象实现原理

在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dict等。 >>> import sys >>> sys.getsizeof(1000) 28 >>> sys.getsizeof(2000) 28 >>> ...

more ...

Python 整数对象实现原理

整数对象在Python内部用PyIntObject结构体表示: typedef struct { PyObject_HEAD long ob_ival; } PyIntObject; PyObject_HEAD宏中定义的两个属性分别是: int ob_refcnt; struct _typeobject *ob_type; 这两个属性是所有Python对象固有的: ...

more ...

OS X El-Capitan 安装 virtualenvwrapper 遇到 Operation not permitted

事情是这样的,在安装完virtualenv后,想配合virtualenvwrapper使用,于是直接是pip安装: $ pip install virtualenvwrapper 于是抱了一错误,说是没有权限,那么加上sudo后运行: $ sudo pip install virtualenvwrapper 发现还是有问题,仔细一看堆栈信息: Collecting six>=1.9.0 ...

more ...

Python Virtualenv 介绍

动态语言Ruby、Python都有自己的虚拟环境,虚拟环境是程序执行时的独立执行环境,在同一台服务器中可以创建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响。例如项目可以在基于Python2的环境中运行,而项目B可以在基于Python3的环境中运行。Python通virtualenv工具管理虚拟环境。 安装 virtualenv $ pip install ...

more ...

修改Python的pip安装源

在 python 中用pip安装依赖包时默认会从 https://pypi.python.org/simple/这个地址取下载,但是这个网站经常出现下载不稳定、访问速度非常慢的情况,这时,我们可以修改配置用国内厂商提供的镜像地址来替换,一个是豆瓣的镜像,另一个是中国科学技术大学的。地址分别是: 豆瓣:http://pypi.douban.com/ 中国科学技术大学 ...

more ...

小记:datetime 与 timestamp 相互转换遇到的坑

事情是这样的,今天遇到一个业务场景:按照比赛的时间start_at作为分页查询的条件获取赛程列表,首先初始化20条数据(数据库用的是MongoDB) 事情是这样的,今天遇到一个业务场景:按照比赛的时间start_at作为分页查询的条件获取赛程列表,首先初始化20条数据(数据库用的是MongoDB): 第1条记录: start_at: 2015-08-15 01:13:17.330299 ...

more ...

如何在Python中正确使用static、class、abstract方法

本文翻译自The definitive guide on how to use static, class or abstract methods in Python,初译版本发布于伯乐在线,内容略有改动。 在Python面向对象编程中,类中的方法有多种形式:实例方法、静态方法、类方法、抽象方法,本文来说说如何正确地使用这些方法。 实例方法 实例方法的定义只需要把第一个参数指定为 ...

more ...

如何理解Python关键字yield

两年前开始接触Python,在SO上看到一篇关于yield的文章,讲解不错,于是尝试将其翻译成了中文,发布在伯乐在线,后来译文收到了不少吐槽,于是两年后的今天对其文重新理解一篇,遂有了此文,译文加入了大量译注信息,帮助读者更好的理解。 (译注:以下代码必须在Python3环境下运行)在理解yield之前,你需要明白生成器(generator)是什么?生成器又源自于迭代对象。 ...

more ...

网页正文内容抽取

此代码是对论文《基于行块分布函数的通用网页正文抽取》的Python实现方式。论文的出发点是针对搜索引擎正文提取的解决方案,移除了所有的标签元素,因此我在此保留了标签元素,改进用户阅读体验。 特点: 保留正文标签 资源(图片、超链接等)路径为绝对路径(即使原文是相对路径)避免找不到资源 下载: git clone ...

more ...

StringIO---像文件一样读写字符串

有些API仅接受文件对象,但是你只有一个字符串,比如使用gzip模块压缩字符串的时候,StringIO就可以派上用场了 import gzip import StringIO stringio = StringIO.StringIO() gzip_file = gzip.GzipFile(fileobj=stringio, mode='w') gzip_file.write('hello ...

more ...

单元测试学习

单元测试是个好东西,但是如果代码中多处有数据库访问(读/写),或者代码中包含一些复杂的对象,真实环境中难以被触发的对象的时候,该如何写单元测试呢? 使用模拟对象机制测试python代码,模拟对象(mock ...

more ...

Django-Compressor 静态文件压缩

在网站开发阶段,对于静态资源文件比如JS,CSS等文件都是未经过压缩合并处理的,这对于访问量巨大的网站来说不仅浪费带宽,而且也会影响网站的访问速度。django-compressor的作用就是将静态文件压缩合并成一个文件,不仅减少了网站的请求次数,还能节省网络带宽。 ...

more ...

理解Python装饰器

装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 ...

more ...