Python之美[从菜鸟到高手]
文章平均质量分 85
受C/C++影响,我们写的Python代码不够美,没有充分利用Python的强大特性和机制。本专栏探讨Python的高级特性,让我们的代码更加Pythonic
yueguanghaidao
这个作者很懒,什么都没留下…
展开
-
玩转Python让人讨厌的编码问题
Python的编码问题基本是每个新手都会遇到的坎,但只要完全掌握了就跳过了这个坑,万变不离其中,这不最近我也遇到了这个问题,来一起看看吧。事情的起因是review同事做的一个上传功能,看下面一段代码,self.fp是上传的文件句柄fpdata = [line.strip().decode('gbk').encode('utf-8').decode('utf-8') for line in self.原创 2016-01-31 00:03:08 · 41139 阅读 · 2 评论 -
如何面试Python后端工程师?
前一段时间有人在知乎提了http://www.zhihu.com/question/33398583,如何面试Python工程师?我斗胆回答了一下, http://www.zhihu.com/question/33398583/answer/59017861吃午饭的时候我就一直在想这个问题,我觉得重点不是Python而是后端工程师,因为Python只是系统的一部分,linux基础操作要熟吧,sql原创 2015-11-04 15:07:50 · 32755 阅读 · 20 评论 -
Python之美[从菜鸟到高手]--NotImplemented小析
今天写代码时无意碰到NotImplemented,我一愣,难道是NotImplementedError的胞弟,所以稍微研究了一下。NotImplemented故名思议,就是“未实现”,一般是用在一些比较算法中的,如class的__eq__,__lt__等,注意NotImplemented并不是异常,所以不能使用raise,当没有实现时应该是return NotImplemented。我们可以看看d原创 2014-08-17 19:51:18 · 16015 阅读 · 2 评论 -
Python之美[从菜鸟到高手]--2+2=5
今天在伯乐在线上看到原创 2014-06-29 20:44:31 · 4865 阅读 · 0 评论 -
Python之美[从菜鸟到高手]--浅拷贝、深拷贝完全解读(copy源码分析)
可悲的我一直以为copy模块是用C写的,有时候需要原创 2014-05-19 20:43:16 · 10523 阅读 · 1 评论 -
Python之美[从菜鸟到高手]--读"一道面试题看 HashMap 的存储方式"的联想
今天在伯乐在线 一道面试题看 HashMap 的存储方式,也即使问:在 HashMap 中存放的一系列键值对,其中键为某个我们自定义的类型。放入 HashMap 后,我们在外部把某一个 key 的属性进行更改,然后我们再用这个 key 从 HashMap 里取出元素,这时候 HashMap 会返回什么?如何面试者直接答“这要看自定义类型的hash值了”,我想面试官会非常满意,抓住问题关键很重要。联原创 2014-05-18 20:47:54 · 9522 阅读 · 1 评论 -
Python之美[从菜鸟到高手]--urllib源码分析
urllib提供了较好的封装,可以很方便的读取http,ftp,file等协议数据,本篇只关注http。urllib的底层还是使用httplib模块,相比于httplib,urllib接口更加好用,功能更加强大。支持http代理,可从环境变量中获取代理信息,支持http basic auth,可自动处理302等。但也有不足,如不支持gzip等压缩编码,不支持摘要认证,NTML认证等。原创 2013-11-23 22:48:45 · 18554 阅读 · 0 评论 -
向Python女神推荐这些年我追过的经典书籍
最近"瑞丽模特学Python"的热点牵动了大江南北程序员的心,有人说这是炒作,也有人说这是推广Python的爆点。。。我嘿嘿一笑,美女就是美女,眼光那是杠杠的,不仅人美,学的语言也美。那咱也不能藏私,必须得把我读过的Python好书向女神推荐一下...... 记得我毕业面试现在这家公司的时候(偶是13年毕业),当时面试官看到我简历上写熟悉Python时,特地问了我Python的情况,我能原创 2013-08-27 23:13:41 · 78455 阅读 · 21 评论 -
Python之美[从菜鸟到高手]--urlparse源码分析
urlparse是用来解析url格式的,url格式如下:protocol :// hostname[:port] / path / [;parameters][?query]#fragment,其中;parameters一般用来指定特殊参数,使用的较少,至少我没怎么碰到,举几个链接:http://en.wikipedia.org/wiki/Robotics;Notes,http://en.wiki原创 2013-11-17 22:41:09 · 8446 阅读 · 1 评论 -
Python之美[从菜鸟到高手]--httplib源码分析及IncompleteRead异常解决方案
由于平时主要用Python编写Web漏洞规则脚本,所以网络方面的库使用较多,如urllib,urllib2,httplib2等,我们知道urllib这几个库都是基于httplib库开发的,那么她们有什么区别呢?只能通过源码去分析,想看源码,那么基础库httplib得熟悉。原创 2013-11-09 06:11:27 · 19298 阅读 · 1 评论 -
Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)
我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等。强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(爱之初体验)的基础知识。一:扩展中的异常处理 高级语言如C++,Java等都有完善的异常控制,Python也不例外。但与C++不同的是,写C++你可以完全抛弃异常处原创 2013-09-15 23:08:33 · 9882 阅读 · 0 评论 -
Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(爱之初体验)
一直对Python扩展很感兴趣,刚好看到了Extending and Embedding the Python Interpreter文档,看的是最低版本(由于工作中用的是2.x, ̄□ ̄),链接:http://docs.python.org/2.6/extending/index.html 我使用的是Code::Blocks 12.11,首先需要配置一下环境(windows)。原创 2013-09-12 01:12:08 · 14987 阅读 · 6 评论 -
Python之美[从菜鸟到高手]--Python垃圾回收机制及gc模块详解
Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。引用计数最大缺陷就是循环引用的问题,所以Python采用了辅助方法。本篇文章并不详细探讨Python的垃圾回收机制的内部实现,而是以gc模块为切入点学习Python的垃圾回收机制,如果想深入可以读读>。 看如下代码:import gcimport sysgc.set_debug(gc.DEBUG_STATS|gc.原创 2013-09-08 21:14:36 · 73695 阅读 · 5 评论 -
Python之美[从菜鸟到高手]--深刻理解原类(metaclass)
本来想自己写这篇文章的,可当我读了这篇文章http://blog.jobbole.com/21351/,我打消了这个念头,因为肯定写的没有人家的好,说的通俗易懂,面面俱到。就厚着面皮修改下格式,测试下代码,当作原创了,面皮貌似有点厚啊。。。。有点长,需要花点耐心。 译注:这是一篇在Stack overflow上很热的帖子。提问者自称已经掌握了有关Python OOP编程中的各种概念,但原创 2013-08-27 00:21:00 · 5326 阅读 · 2 评论 -
Python之美[从菜鸟到高手]--玩转描述符和属性
你知道property的实现原理吗? 你知道@classmethod,@staticmethod的原理吗?如果你摇头了,那么这篇文章你肯定不能错过,让我们开始吧? 在说property之前,我们需要理解描述符,因为不管property还是classmethod都是构建在描述符的基础上,那么到底什么是描述符呢? 描述符,用一句话来说,就是将某种特殊类型的类的实例指原创 2013-08-25 14:37:28 · 13179 阅读 · 2 评论 -
Python之美[从菜鸟到高手]--生成器之全景分析
yield指令,可以暂停一个函数并返回中间结果。使用该指令的函数将保存执行环境,并且在必要时恢复。生成器比迭代器更加强大也更加复杂,需要花点功夫好好理解贯彻。看下面一段代码:def gen(): for x in xrange(4): tmp = yield x if tmp == 'hello': print 'worl原创 2013-08-23 01:13:36 · 18189 阅读 · 11 评论 -
Python之美[从菜鸟到高手]--装饰器之使用情景分析
有这个一个需求,统计一个函数执行时间 ? 方案很多,但无疑使用装饰器是一种好的方案。def timer(func): def _timer(*args,**kwargs): #参数是函数调用传递过来的参数 begin=time.time() func(*args,**kwargs) time.sleep(2) print原创 2013-08-20 22:36:09 · 7399 阅读 · 2 评论