Python
文章平均质量分 79
slvher
这个作者很懒,什么都没留下…
展开
-
【Python学习笔记】list/dict对象复制的误区与正确方法
吃晚饭时跟同事讨论问题,发现关于python的一个有趣问题,起源如下: 同事Y:python的list用法有个坑。。。 我:啥坑? 同事Y:下面的用法会出现死循环(同事Y口头说的,可翻译成下面的代码)a = [0, 1, 2, 3]b = afor item in a: b.append(item) 我:啊。。。 之前原创 2013-05-03 23:04:22 · 2255 阅读 · 0 评论 -
【Python笔记】如何编译不依赖lapack和atlas库的NumPy包
NumPy是科学计算方面的一个Python库,在数据挖掘或机器学习或科学统计等领域经常被用到,官网在这里。在实际业务中,为发挥NumPy的高性能,在编译NumPy时会依赖一些经过特别优化的第三方科学计算库。对于初次接触NumPy的新手来说,从源码编译安装依赖外部库的NumPy通常不是一个简单的任务。事实上,NumPy这个Python包本身不需依赖任何第三方库就能完成编译和安装使用,只不过其原创 2015-04-02 15:57:17 · 3261 阅读 · 0 评论 -
【龙书笔记】用Python实现一个简单数学表达式从中缀到后缀语法的翻译器(采用递归下降分析法)
上篇笔记介绍了语法分析相关的一些基础概念,本篇笔记根据龙书第2.5节的内容实现一个针对简单表达式的后缀式语法翻译器Demo。备注:原书中的demo是java实例,我给出的将是逻辑一致的Python版本的实现。在简单后缀翻译器代码实现之前,还需要介绍几个基本概念。1. 自顶向下分析法(top-down parsing)顾名思义,top-down分析法的思路是推导产生式时,以产生式开始原创 2015-04-06 12:59:19 · 3411 阅读 · 0 评论 -
【Python笔记】如何源码编译依赖LAPACK和ATLAS库的NumPy包
上篇笔记介绍了不依赖lapack和atlas库的NumPy包源码编译/安装方法,但“纯净版”的NumPy会损失性能,故本篇笔记说明如何源码编译安装依赖lapack和atlas库的NumPy包。1. GCC版本要求 使用较新版本的GCC工具集(尽量不低于v4.7)且继承有gfortran编译器。备注1:这里大写的"GCC"是指GNU Compiler Collection,它除包含C语言原创 2015-04-03 12:15:39 · 4198 阅读 · 0 评论 -
Python Web框架Tornado的异步处理代码示例
1. What is TornadoTornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但可以提供基本的web server功能,故它是轻量级的;它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库原创 2015-07-30 15:14:44 · 7157 阅读 · 0 评论 -
如何用supervisor守护php-fpm主进程以实现php-fpm的自动重启
最近有同事有个针对php-fpm进程的监护需求,也即:如果php-fpm的master进程意外退出(可能是crash,也可能是被误kill),那么希望master进程能被自动拉起,以免中断服务。我们知道,supervisor是一个非常强大的进程监控(monitor & control)工具,它理论上可以实现php-fpm master进程的守护需求。因此,我帮同事试验了如何用supervisor完成原创 2015-07-18 22:17:25 · 11718 阅读 · 0 评论 -
如何使用SQLAlchemy库写出防SQL注入的Raw SQL
Python阵营有很多操作数据库的开源库(安装pip后,可以借助”pip search mysql”查看可用的库列表),其中被使用最多的无疑是MySQLdb,这个库简单易上手。其偏底层的特性为开发者提供灵活性的同时,也对不少新手写出的DB操作代码提出了考验,因为它只支持raw sql,容易导致sql注入攻击。鉴于此,很多库提供了ORM接口能力,借助OO思想,数据库中的表被映射为Python的类,类的原创 2015-08-03 17:46:27 · 10182 阅读 · 0 评论 -
如何用Fabric实现无密码输入提示的远程自动部署
上篇笔记介绍了Fabric的概念、支持的元操作及task的定义方法,本篇笔记旨在说明如何在多台目标机器上正确地执行tasks以实现远程自动部署或运维。特别地,文中会说明如何配置fabric task以便远程执行命令时不会弹出密码输入提示。1. Fabric的任务运行规则根据Fabric Execution model的说明,fabric默认以串行方式运行tasks,具体而言: 1)在fabfile原创 2015-12-27 23:18:39 · 7802 阅读 · 0 评论 -
supervisorctl报错"error: <class 'socket.gaierror'>, [Errno -2] Name or service not known"的解决方法
如果用Python写过线上的后端服务,相信对Supervisor不会陌生,它包含两个主要工具: 1)supervisord: 用来实现进程守护 2)supervisorctl: 用来实现supervisord对其守护进程的控制,如reload配置文件、启/停其守护的子进程,等等在使用supervisorctl执行如下命令时,## 其中sup.xxx.conf是supervisord的配置文件$原创 2016-01-04 22:53:44 · 11280 阅读 · 0 评论 -
自动化部署工具Fabric简介
在持续集成/灰度发布越来越流行的今天,模块在预览或生产环境的部署流程自动化显得越来越重要。本文要介绍的Fabric就是一个帮助我们在上线时减少重复/繁琐操作的自动化部署利器,对于缺乏成熟运维平台的众多小公司的运维或开发人员来说,掌握这个工具是有必要的。1. Fabric是什么Fabric官方文档的描述如下: Fabric is a Python (2.5-2.7) library and comm原创 2015-12-27 19:00:15 · 5789 阅读 · 0 评论 -
【Python笔记】从一个“古怪”的case探究CPython对Int对象的实现细节
1. Python的对象模型我们知道,在Python的世界里,万物皆对象(Object)。根据Python官方文档对Data Model的说明,每个Python对象均拥有3个特性:身份、类型和值。官方文档关于对象模型的这段概括说明对于我们理解Python对象是如此重要,所以本文将其摘录如下(为了使得结构更清晰,这里把原文档做了分段处理):1) Every object has an i原创 2015-03-28 19:30:07 · 1504 阅读 · 0 评论 -
【Python笔记】剖析Python的切片(slicing)语法
相信即使是Python新手也很容易理解下面的切片行为:>>> s = 'this_is_a_test'>>> s[1 : 5]'his_'进一步,下面的语法及输出也很不难理解:>>> s = 'this_is_a_test'>>> s[ : : 2]'ti_sats'那么,下面的呢?>>> s = 'this_is_a_test'>>> s[ : : -1]'tset_a_原创 2015-03-28 17:38:10 · 16763 阅读 · 0 评论 -
【Python笔记】python第三方库lxml源码安装&&使用笔记
python第三方库lxml使用笔记1. 源码安装 由于想折腾一下,故选择源码安装。 从官网下载lxml最新版本(lxml-3.3.3)源码,linux机器可用curl工具拉取lxml源码,参考命令如下curl -v --cacert ./https-ca/cacert.pem https://pypi.python.org/packages/sourc原创 2014-05-14 20:35:52 · 6039 阅读 · 2 评论 -
【Python笔记】图片处理库PIL的源码安装步骤
前段时间项目需要对某些图片打水印,用到Python的PIL库,本文以Imaging-1.1.7为例,记录PIL库的源码编译/安装步骤。PIL全称Python Image Library,它支持多种图片格式的处理,能为我们的应用程序代理强大的图像处理能力,如裁剪、旋转、打水印等。从官网下载v1.1.7版本源码并解压后,cd至解压目录,读README可知,若想在应用中处理jpeg图片,需要预先原创 2014-08-22 16:36:07 · 3288 阅读 · 0 评论 -
【Python笔记】如何用C语言实现Python第三方扩展包
Python支持C/C++实现的第3方扩展包,在性能要求高的场合,这种特性显得尤其重要。本文以实例说明定制Python扩展包的基本步骤。1. 扩展包源码按照Python官网教程Extending Python with C or C++,扩展模块的源文件如下:#include // forward declarationvoid initpyext(void);// se原创 2014-09-12 19:23:45 · 2532 阅读 · 0 评论 -
【Python笔记】如何理解python中的generator functions和yield表达式
本篇笔记记录自己对Python的generator functions和yield表达式的理解。1. Generator Functions Python支持的generator functions语法允许我们定义一个行为与iterator类似的函数,它可以被用在需要循环调用的场合。与普通函数相比,generator functions只是在函数定义中多了1个yield表达式,原创 2014-11-17 13:34:55 · 3341 阅读 · 0 评论 -
【Python笔记】从一段Bug代码来理解Python的Naming Rule
从Python文档关于Naming and binding的说明可知,变量名是绑定到具体对象的,从这点来看,可以把它理解为C++中的引用。考虑下面两行语句:a = 'test'a = 'test_ext'第1行执行后,Python解释器会在内存中创建string类型的对象'test',这个对象一旦创建就不能再修改其值。赋值符号只是将变量名a绑定到这个对象上而已。第2行执行后,同理,值为'原创 2015-01-30 13:55:46 · 1514 阅读 · 0 评论 -
【Python笔记】装饰器语法糖(@staticmethod/@classmethod/@property)原理剖析及使用场景说明
在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classmethod或@property的语法糖。本质上,它们都是函数装饰器,只不过通常被用来修饰类成员函数而已。本笔记旨在说明这些语法糖的用途,关于普通函数装饰器语法的解释,可以参考这篇笔记。在解释这些装饰器函数前,先来分析下普通成员函数。1. 类的普通成员函数对于P原创 2015-01-07 19:31:14 · 7171 阅读 · 2 评论 -
【Python笔记】源码编译安装Python时,如何支持自定义安装的高版本openssl库
最近有个小需求想使用Scrapy库做抓取,但公司开发机操作系统版本老旧,导致系统默认的openssl库版本也很低(OpenSSL 0.9.7a Feb 19 2003),最终导致安装Scrapy非常麻烦。趁着元旦假期,决定用自己安装好的高版本openssl库作为依赖,重新编译安装开发机的Python环境。安装及其后使用中遇到一些关于openssl的问题,或许对自己后续工作或别人有参考价值,作为原创 2015-01-02 22:20:55 · 27036 阅读 · 3 评论 -
【Python笔记】WEB抓取框架Scrapy的安装方法
Scrapy是一个Python实现的轻量级爬虫框架,它借助Twisted实现异步抓取。关于Scrapy的简介,可以参考官网文档Scrapy at a glance,关于业界对Scrapy的评价,可以参考Quora上的这篇问答帖Is there a better crawler than Scrapy?本文给出两种安装Scrapy的方式:1) 通过pip安装;2) 通过源码编译安装。1.原创 2015-01-02 23:15:45 · 7834 阅读 · 0 评论 -
【Python笔记】Python的几个高级语法概念浅析:lambda表达式 && 闭包 && 装饰器
本文主要记录自己对几个高级语法概念的理解:匿名函数、lambda表达式、闭包、装饰器。这几个概念并非Python特有,但本文只限于用Python做说明。1. 匿名函数匿名函数(anonymous function)是指未与任何标识符绑定的函数,多用在functional programming languages领域,典型应用场合:1) 作为参数传给高阶函数(higher-or原创 2014-09-12 12:06:50 · 4790 阅读 · 0 评论 -
【Python笔记】Python多线程进程如何正确响应Ctrl-C以实现优雅退出
相信用C/C++写过服务的同学对通过响应Ctrl-C(信号量SIG_TERM)实现多线程C进程的优雅退出都不会陌生,典型的实现伪码如下:#include <signal.h>int main(int argc, char * argv[]) { // 1. do some init work ... init() ... // 2. install signal handl原创 2015-12-26 21:53:24 · 10224 阅读 · 0 评论