• Python性能优化的20条建议

    1、优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。 2、减少冗余数据 如用上三角或下三角的方式去保存一个大的对称矩阵。在0元素占大多数的矩阵里使用稀疏矩阵表示。 3、合理使用copy与deepcopy 对于dict和list等数据结构的对象,直接赋值使用的是引用的方式。而有些情况下需要复制整个对象,这时可以使用copy包里……
  • code123
    Python奇技淫巧

    Python奇技淫巧

    显示有限的接口到外部 当发布python第三方package时, 并不希望代码中所有的函数或者class可以被外部import, 在__init__.py中添加__all__……
  • tornado异步请求

    Python的web框架五花八门.大而全的框架Django,小巧的框架如web.py,flask等.以异步著称的tornado等等. 这里记录一下tornado编写异步请求程序的例子. 首先要知道,要想整个web服务是异步的,前提条件是你的各个耗时操作是异步的才行.如果你的操作是一个sleep(),由于tornado本身是单进程单线程的,那么你整个进程就被sleep()阻塞了. 一个典型的tornado异步方法编写如下: class Index(RequestHandler): @coroutine def get(self): response = yield AsyncHTTPClient().fetch('http://google.com') ……
  • Python汉字转换成拼音

    最近在使用Python做项目时,需要将汉字转化成对应的拼音.在Github上找到了一个现成的程序. Python汉字转拼音 使用实例如下: from pinyin import PinYin test = PinYin() test.load_word() print test.hanzi2pinyin(string='钓鱼岛是中国的') print test.hanzi2pinyin_split(string='钓鱼岛是中国的', split="-") 123456 from pinyin import PinYin test = PinYin()test.load_word()print test.hanzi2pinyin(string='钓鱼岛是中国的')print test.hanzi2pinyin_spli……
  • Python WSGI详解

    什么是WSGI WSGI的全称是Web Server Gateway Interface,这是一个规范,描述了web server如何与web application交互、web application如何处理请求。该规范的具体描述在PEP 3333。注意,WSGI既要实现web server,也要实现web application。 实现了WSGI的模块/库有wsgiref(python内置)、werkzeug.serving、twisted.web等,具体可见Servers which support WSGI。 当前运行在WSGI之上的web框架有Bottle、Flask、Django等,具体可见Frameworks that run on WSGI。 WSGI server所做的工作仅仅是将从客户端收到的请求传递给WSGI application,……
  • Python爬虫框架Scrapy教程(3)—使用Redis和SQLAlchemy

    在上篇博客中,我们讲解了如何通过维护多个网站的爬取规则来抓取各个网站的数据。本文将简要地谈谈如何使用Scrapy的Item Pipline将爬取的数据去重并存储到数据库中。 Scrapy框架的高度灵活性得益于其数据管道的架构设计,开发者可以通过简单的配置就能轻松地添加新特性。我们可以通过如下的方式添加一个pipline。 settings.set("ITEM_PIPELINES", {'pipelines.DataBasePipeline': 300}) 1 settings.set("ITEM_PIPELINES", {'pipelines.DataBasePipeline': 300}) ……
  • Python爬虫框架Scrapy教程(2)—动态可配置

    本文紧接上篇博客,在上一篇博客中我们讲解了如何使用编程的方式运行Scrapy spider。本文将讲解如何通过维护多个网站的爬取规则来抓取各个网站的数据。 具体要实现的目标是这样的,有一张Rule表用来存储各个网站的爬取规则,Scrapy获取Rule表中的记录后,针对每一条rule自动生成一个spider,每个spider去爬它们各自网站的数据。这样我们只需要维护Rule表中的规则(可以写个Web程序来维护),而不用针对上千个网站写上千个spider文件了。 我们使用 SQLAlchemy 来映射数据库,Rule表的结构如下: from sqlalchemy import C……
  • Python爬虫框架Scrapy教程(1)—入门

    最近实验室的项目中有一个需求是这样的,需要爬取若干个(数目不小)网站发布的文章元数据(标题、时间、正文等)。问题是这些网站都很老旧和小众,当然也不可能遵守 Microdata 这类标准。这时候所有网页共用一套默认规则无法保证正确抓取到信息,而每个网页写一份spider代码也不切实际。 这时候,我迫切地希望能有一个框架可以通过只写一份spider代码和维护多个网站的爬取规则,就能自动抓取这些网站的信息,很庆幸 Scrapy 可以做到这点。鉴于国内外关于这方面资料太少,所以我将这段时间来的经验和代码分享成了本文。 为了讲清楚这件……
  • Python性能优化的20条建议

    优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式,总得来说,一般有分治,分支界限,贪心,动态规划等思想。 减少冗余数据 如用上三角或下三角的方式去保存一个大的对称矩阵。在0元素占大多数的矩阵里使用稀疏矩阵表示。 合理使用copy与deepcopy 对于dict和list等数据结构的对象,直接赋值使用的是引用的方式。而有些情况下需要复制整个对象,这时可以使用copy包里的cop……
  • python项目实践九:文件共享2-GUI版本

    有了前面的P2P基础,这一个练习就是给程序加一个可视化的界面,俗称GUI。 python里面的界面库有很多,如wxPython、wgGTK、tkinter,还有QT,按照书中的实例,我也使用wxPython来做界面。话说有了这个界面之后,我发现迅雷的网邻也不过如此(稍有夸张的成份),不过这个项目的练习之上再继续扩展的话,基本效果可以达到网邻的那种,如果有时间的话我可以继续扩展这个项目。下面就开始编写GUI。 这个里面的主要的问题应该都集中在界面上,远程共享的代码已经不需要修改了,只需要把现在的界面接上前面的代码就ok。这个wxPython库的使用,……
  • code123
    python项目实践十:DIY街机游戏

    python项目实践十:DIY街机游戏

    终于来到了最后一个项目,看看前面的那些练习,也算是熟悉了python的基本操作,也知道python能干哪些事情,最后一个项目相比于以前的稍微……
  • python项目实践八:使用XML-RPC进行远程文件共享

    这是个不错的练习,使用python开发P2P程序,或许通过这个我们可以自己搞出来一个P2P下载工具,类似于迅雷。说到迅雷,关于其原理不知道大家是否了解,如果你不了解,我想看完这篇文章,你一定会了解的。啥,你已经了解了?那就过来指点一番。 以前在java中也接触过类似的概念。一个是RMI( Remote Method Invocation)的概念,另外一个就是XML-RPC的概念。 那么什么是XML-RPC呢?它和P2P有什么关系?下面谈谈我的个人理解。 XML-RPC是一个远程过程调用(remote procedurecall,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP……
  • python项目实践七:自定义公告板

    这依然是一个cgi的项目,有了前面的一个项目作为基础,这个里面没有什么难点。不过,和书上不同的是,我这里使用的数据库是mysql,所以有兴趣的童鞋,可以参考一下。 首先建立一张mysql的数据表: CREATE TABLE messages( id INT NOT NULL AUTO_INCREMENT, subject VARCHAR(100) NOT NULL, reply_to INT, text MEDIUMTEXT NOT NULL, PRIMARY KEY(id) ) 12345678 CREATE TABLE messages(    id INT NOT NULL AUTO_INCREMENT……
  • code123
    python项目实践六:使用CGI进行远程编辑

    python项目实践六:使用CGI进行远程编辑

    记得一开始接触web开发的时候,看视频,视频里面的老师一般都会语重心长的说:想当年我们一开始学习编程那会儿,都是用cgi编程,复杂的很……
  • code123
    python项目实践五:虚拟茶话会

    python项目实践五:虚拟茶话会

    几乎在学习、使用任何一种编程语言的时候,关于socket的练习从来都不会少,尤其是会写一些局域网的通信的东西。所以书上的这个项目刚好可……