自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mattkang

剥洋葱,刨根问底

  • 博客(18)
  • 收藏
  • 关注

原创 飘逸的python - 多条件排序及itemgetter的应用

曾经客户端的同事用as写一大堆代码来排序,在得知python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣。之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球,再相同按进球数,再相同按失球数。即按积分P、净胜球GD、进球GS、失球GA这样的顺序。在python中,排序非常方便,排序的参数主要有key、reverse。参数cmp不建议使用了,在python3.0被移除了,用参数key代替。对于多条件排序,也非常简单,只需要记住下面这句话就行。 即参数key指定的函数

2013-07-29 20:49:52 8005

原创 飘逸的python - @staticmethod和@classmethod的作用与区别

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法,而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。既然@staticmethod和@classmethod都可以直接类名.方法名()来调用,那他们有什么区别呢从它们的使用上

2013-07-29 13:29:41 110916 12

原创 飘逸的python - 一段统计次数程序的进化

这段程序是从给定的列表中统计各个小伙伴以及他们的出现次数。littlebuddys = ['jack','terry','john','rooney','ross','kzc','john','ross','ross']新手程序员d = {}for buddy in littlebuddys: if buddy not in d: d[buddy

2013-07-28 07:42:07 3914 3

原创 飘逸的python - hack输出流便于调试

当项目有很多文件时,要找出控制台的输出是在哪里print出来的很麻烦,不过这事对于强大的python来说小菜一碟。先上代码和效果,再说明。import sys,tracebackclass mystdout: stdout = sys.stdout def write(self,_str): if _str != '\n': fil

2013-07-27 09:22:20 4015

原创 飘逸的python - super()只不过是用来避免硬编码的

当在子类需要调用父类的方法时,在python2.2之前,直接用类名调用类的方法,即非绑定的类方法,并把自身对象self作参数传进去。class A(object): def say(self): print 'I am A'class B(A): def say(self): print 'I am B' A.say(self

2013-07-26 10:25:55 2945

原创 飘逸的python - zlib压缩存到数据库

当每天有大量的数据存到kv数据库中去,且value数据很大,于是想压缩后再存进去。之前提到了gzip压缩,为什么不直接用gzip呢。其实更确切的说gzip是一种文件格式,它压缩成gzip文件,而我是要压缩存到数据库中去。gzip是对zlib的包装,添加了一些额外的信息。zlib是一种压缩数据格式,单纯的处理数据。zlib在python中非常容易使用。>>zlib

2013-07-25 08:17:26 3297

原创 飘逸的python - 用urlparse从url中抽离出想要的信息

最近有个需求,要检测配置中的那些url的域名是否都正常,即是否都能ping通。不过配置中url格式是这样的 。要ping的是要把url中的域名抽离出来,一般会想到的是切割字符串,或者用正则表达式。不过有个更干净利落的方法,就是python标准库自带的urlparse。url的各个部分都

2013-07-23 13:09:32 2820

原创 飘逸的python - 简明gzip模块压缩教程

压缩数据创建gzip文件先看一个略麻烦的做法import StringIO,gzipcontent = 'Life is short.I use python'zbuf = StringIO.StringIO()zfile = gzip.GzipFile(mode='wb', compresslevel=9, fileobj=zbuf)zfile.write(content)zfil

2013-07-22 07:55:54 12411

原创 飘逸的python - 中文编码长度有趣的现象

最近在做验证用户姓名的功能时发现这样一个现象。>>len(u'打怪者') #unicode3>>len(u'打怪者'.encode('gbk')) #gbk6>>len('打怪者') #utf-89一般都知道,gbk编码每个汉字占用2个字节,utf8编码的每个汉字占用3个字节,这就是很多网站不用统一标准utf8的原因,就是gbk占用字节少。既然len(u'打

2013-07-21 11:43:12 10946

原创 飘逸的python - 嵌套太深了,让笛卡尔拉你一把

在多重循环的情况下,嵌套太深,代码难看死了。这时可以用标准库itertools 中的笛卡尔积product函数。for x in ['a','b','c']: for y in ['d','e','f']: for z in ['m','n']: print x,y,z转换成from itertools import p

2013-07-20 13:33:34 7496

原创 飘逸的python - inspect谁调用了我

当程序出现诡异的bug时,我们需要层层去跟踪,尤其是要理清顺序。这时如果有个清晰的调用脉络调试就容易多了。利用inspect模块的getframeinfo方法来实现这需求。上代码感受下。import inspectdef foo(): who = inspect.getframeinfo(inspect.currentframe().f_back)[2] prin

2013-07-19 13:19:57 5700

原创 飘逸的python - 使用traceback获取详细的异常信息

try: 1/0except Exception,e: print e输出结果是integer division or modulo by zero,只知道是报了这个错,但是却不知道在哪个文件哪个函数哪一行报的错。下面使用traceback模块try: 1/0except Exception,e: traceback.prin

2013-07-18 20:59:12 101841 7

原创 飘逸的python - 彩色你的控制台

在linux的终端中,ANSI转义序列来控制颜色基本规则: 前面加上\033[,结尾用\033[0m重置为原来的颜色可以在终端中输入下面这句,就可以看到输出绿色的hello。>>echo -e '\033[0;32mhello\033[0m'其中0;32m控制颜色。最简单的,只要把0;32m中的2改成0-7,就对应不同颜色了。0黑1红2绿3棕4蓝5紫

2013-07-18 13:10:11 4588

原创 飘逸的python - 优雅的执行程序

在linux下,我们执行一个python程序是python /path/to/xxx.py。如果这个程序经常使用,会觉得这样有点麻烦。可以chmod +x /path/to/xxx.py,即给这个文件加上了可执行权限,就可以不用在前面敲python,直接/path/to/xxx.py运行了。不过,对于有代码洁癖的人看来,这样还不够优雅,后面还带着.py后缀。把.py后缀去掉也行,只

2013-07-14 12:57:39 2888 1

原创 grep显示匹配行的周围几行

简单来说,就是ABC。A ->After B ->BeforeC ->Context比如grep -A3 'foobar' a.txt,即把匹配到foobar的行的下面3行也给显示出来。

2013-07-12 12:51:22 9811

原创 飘逸的python - __dict__的妙用

设想这样一个场景。我有一个字典,从某个地方获取的,比如http请求发过来的,比如从redis中hgetall出来的。我要根据这个字典来构建一个对象。比如类class Person: def __init__(self,_obj): self.name = _obj['name'] self.age = _obj['age']

2013-07-11 20:26:29 6354 1

原创 飘逸的python - 常见的几个坑

混用空格和tabpython是严格缩进的,全用空格或者全用tab就没错,如果是混用就会有问题。如果用vim开发的话,一般是在配置中把tab转成4个空格。用可变对象作为默认参数def f(a=[]):a.append('kzc')return a>>> f()['kzc']>>> f()['kzc', 'kzc']>>> f()['kzc',

2013-07-10 21:40:22 3046

原创 飘逸的python - str vs. repr

repr - 展示给开发者看的,目标是准确性,显示的是实际在python中的形式,一般可以用eval()给转换回去。str - 展示给用户看的,目标是可读性,是经过包装的。http://img.blog.csdn.net/20130710132259078" _xhe_src="http://img.blog.csdn.net/20130710132259078"/>htt

2013-07-10 13:24:10 2609

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除