自定义博客皮肤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

剥洋葱,刨根问底

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

原创 飘逸的python - 保持命名空间的整洁

API的设计是一个艺术活。往往需要其简单、易懂、整洁、不累赘。很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的。也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎么实现的,不用关心其它辅助方法的存在。在python中,有几种策略来保持命名空间的整洁。1.变量命名用下划线_开头下划线_开头的变量在其它模块from xxx import *的时候不

2013-08-31 21:32:40 4045 1

原创 python第三方库推荐 - 通过ntplib在windows上同步时间

很多时候我们有通过程序脚本同步校正北京时间的需求。在linux上同步时间比较方便,安装个ntpdate软件就行了。但是在windows的要同步时间比较麻烦。这时想到的就是从网络获取一个准确的时间,然后调用dos命令修改时间。从哪里获取呢?当然是国家授时中心。授时中心的网址是 cn.pool.ntp.org(注意,流传甚广的210.72.145.44这个ip已经失效了,直接用域名

2013-08-31 20:15:45 10290

原创 飘逸的python - 性能调优利器profile及其意义

VIM 的作者Bram Moolenaar在一篇叫高效文本编辑器的7个习惯的ppt中有这么一段话。Three basic steps1.    Detect inefficiency 2.    Find a quicker way 3.    Make it a habit即1.检测哪里效率低下2.找到一种更快的方法3.养成习惯 这3个步骤可谓是大道至简。

2013-08-25 13:08:32 7175

原创 飘逸的python - 重载操作符

前面有篇博文《 飘逸的python - 字典合并值相加》讲到了如何对字典合并。通过调用union_dict(obj1,obj2) 来合并。在这里,我们重载操作符直接用obj1 + obj2来到达相同的目的。实现方法就是,定义一个类,直接继承dict,没错,直接继承内置数据结构。然后定义魔术方法__add__()。下面看代码。def union_dict(*objs):

2013-08-25 08:51:50 3326

原创 飘逸的python - 使用reload进行热更新

一开始我们的游戏商城配置是从txt读取解析的。后来为了方便运营修改配置,改成从数据库读取并提供后台可视化编辑配置。如果为了使配置生效而重启游戏进程那太麻烦了。这时候reload就派上用途了。下面演示如何使用reload。 假设有下面3个文件。config.txt--纯文本配置config.py--解析纯文本配置转换成python变量test_reload

2013-08-25 00:06:55 11257

原创 飘逸的python - 有的升序有的降序的情况下怎么多条件排序

之前在统计导出各区服玩家消费的时候需要进行升序降序混搭的多条件排序。需求是这样的。区服从小到大排,如果区服相同,则按消费从大到小排。实现方法是利用python的sort算法是稳定排序,对数据进行多次排序,先排次要条件,后排主要条件。还有一种更简洁的一行流的方法,不过只有当待排数据是数值的时候才有效。此方法利用相反数的性质,在前面加个负号。下面上代码。#假设数据如下。data

2013-08-23 00:11:51 8202 4

原创 飘逸的python - 打印螺旋矩阵

算法分析:螺旋矩阵用二维数组表示,坐标(x,y),即(x轴坐标,y轴坐标)顺时针螺旋的方向是->右,下,左,上,用数值表示即是x加1格(1,0),y加1格(0,1),x减1格(-1,0),y减1格(0,-1)坐标从(0,0)开始行走,当超出范围或遇到障碍时切换方向经过上面的分析,思路很清晰了,千言不如一码。import itertoolsdef spiral(n,m):

2013-08-22 00:12:02 6945 2

原创 python第三方库推荐 - dateutil

在dateutil中,吸引我的东西有2个,1个是parser,1个是rrule。其中parser是根据字符串解析成datetime,而rrule是则是根据定义的规则来生成datetime。安装没必要下载源码包手动安装,直接用easy_install或pip在线安装easy_install python-dateutilpip install python-dateutil关

2013-08-21 00:17:38 34500 6

原创 飘逸的python - 赛程表算法

最近德甲英超西甲各大联赛重燃战火,想起之前写过的一段生成赛程表的代码,用python来写这类东西太舒服了。这个算法叫做蛇环算法。即,把所有球队排成一个环形(2列),左边对阵右边,第一支队伍不动,其他队伍顺时针循环,这样就肯定不重复了。为了方便说明,假设有8支球队a到h。像下面那样按环形排好。a h|   |b g|   |c  f|   |d-e这样,第

2013-08-20 00:09:23 6417 2

原创 飘逸的python - 类型判断type与isinstance的区别

在游戏项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。验证类型用type函数,非常好用,比如>>type('foo') == strTrue>>type(2.3) in (int,float)True既然有了type()

2013-08-18 11:37:30 68447

原创 简单几步让SecureCRT更舒服【图文并茂】

有些东西,配置前跟配置后用起来有云泥之别,vim就是这样一个东西。配置SecureCRT没有这么明显的效果,但还是感觉舒服多了。只需要简单的几步,设置一下“会话选项”。反空闲一般来说,会话默认30分钟会超时,需要重连。像腾讯的CVM,建立连接是比较麻烦的,要上开放平台获取动态的token,用密码+token才能连接。配置了反空闲后就不会超时了。就是keepa

2013-08-18 00:37:27 9516 4

原创 飘逸的python - 字典合并值相加

在统计汇总游戏数据的时候,有些数据是是每天用字典存的,当我要对多天汇总的时候,就需要合并字典了。如果key相同的话它们的值就相加。不能用update方法,因为用update方法则相同的key的值会覆盖,而不是相加。千言不如一码。def union_dict(*objs): _keys = set(sum([obj.keys() for obj in objs],[]))

2013-08-17 00:20:46 19676 1

原创 飘逸的python - 对字典diff("异或")

在游戏中,我要监控记录物品系统中的背包变动情况。假设背包的存储结构是这样的。是一个字典,{物品id:数量}。在背包类初始化的时候,把背包物品信息copy保存到一个oldbag变量,进行一些物品操作后(比如使用物品,领取物品奖励等),在调用save()方法存进redis时,对新的bag字典与oldbag字典进行差异对比就得出变动情况了。千言不如一码。def symmetric_d

2013-08-16 00:24:56 5615 1

原创 飘逸的python - 鲜为人知的参数

虽然用了这么久的python,但是还是能断断续续发现一些本以为很熟悉的东西的“秘密”。split()的maxsplit参数>>'hello,world,foo,bar'.split(',',1)['hello', 'world,foo,bar']enumerate()的start参数>>list(enumerate(['a','b','c'],2))[(

2013-08-15 00:21:49 4200 4

原创 飘逸的python - 不要用二进制模式打开文本文件

先看下面代码的“诡异”现象。假设在windows下,我有个f.txt文件,里面的内容是下面这样的。helloworld代码一,with open('f.txt', 'r') as f: print f.readlines()with open('f.txt', 'rb') as f: print f.readlines()输出['hell

2013-08-12 22:01:43 7181

原创 飘逸的python - 理解打开文件的模式

当我们用open()函数去打开文件的时候,有好几种打开的模式。'r'->只读'w'->只写,文件已存在则清空,不存在则创建。'a'->追加,写到文件末尾'b'->二进制模式,比如打开图像、音频、word文件。'+'->更新(可读可写)这个带'+'号的有点难以理解,上代码感受下。with open('foo.txt', 'w+') as f:

2013-08-09 08:53:13 3086

原创 飘逸的python - 编码杂症之在字符串前面加u

有时候我们从其它地方接受的字符串经过艰难跋涉,它变了个样。比如收到的是'\u6253\u602a\u8005'而不是u'\u6253\u602a\u8005'。明明肉眼看起来只需要加个u,但是怎么加呢?>>s = '\u6253\u602a\u8005'>>s'\\u6253\\u602a\\u8005'>>'u'+s'u\\u6253\\u602a\\u8005'

2013-08-08 08:21:50 8157

原创 飘逸的python - 发送带各种类型附件的邮件

上一篇博文演示了如何发送简单的邮件,这一篇将演示如何发送各种类型的附件。基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。在python中,MIME的这些对象的继承关系如下。MIMEBase    |-- MIMENonMultipart        |-- MIMEAppl

2013-08-07 08:24:33 21114 3

原创 飘逸的python - 发送qq邮件

之前在搞监控预警的时候需要发邮件通知,很简单,就跟呼吸一样。import smtplibfrom email.mime.text import MIMEText_user = "[email protected]"_pwd = "***"_to = "[email protected]"#使用MIMEText构造符合smtp协议的header及bodymsg = MIMEText(

2013-08-06 08:27:30 15098 3

原创 飘逸的python - 灵活的动态之xxxattr

标题的xxxattr指的是hasattr/getattr/setattr/delattr。可以动态的检测、获取、设置、删除对象的属性和方法。这里所说的动态,说白了就是“可以通过字符串来做这些事”。这是一个非常强大灵活的特性。我举个例子。有个GM工具来设置玩家角色的属性,比如角色的属性有经验、体力、游戏币。roletable = {'31415926':{'exp':99,'

2013-08-04 07:58:45 3128

原创 飘逸的python - 偏函数functools.partial

函数式编程的思想。可以理解成绑定了一部分参数的函数。作用就是少传参数,更短,更简洁。我之前做的一段用户留存率的程序。需求是这样子的,选择某一天,然后以这天为准,次日留存,3日留存,7日留存,14日留存,30日留存。已有一个获取第几天后的函数from datetime import datetime,timedeltadef GetNextDay(baseday,n):

2013-08-02 07:50:26 24763 5

原创 飘逸的python - 命令行漂亮的显示json数据

之前做的一个脚本把信息用json格式存到文本中。这样的好处是简便,易编辑,并且拥有强大的表达能力。不过从文本cat出来的是一堆很难看的字符串,没换行和缩进。这时候就在想,如果有个类似于IDE的格式化代码的工具来显示格式化的json数据,那就好了。这工具不用四处去找,python就提供了这样一个东西。从python2.6开始,多了个json.tool的东西。使用很简单。在命令行中

2013-08-01 07:25:58 27846 3

空空如也

空空如也

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

TA关注的人

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