mattkang

他掀开被单,整了整胸前的红领巾,开始了这段编程旅程

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

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

2013-08-31 21:32:40

阅读数:3769

评论数:1

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

很多时候我们有通过程序脚本同步校正北京时间的需求。 在linux上同步时间比较方便,安装个ntpdate软件就行了。 但是在windows的要同步时间比较麻烦。 这时想到的就是从网络获取一个准确的时间,然后调用dos命令修改时间。 从哪里获取呢?当然是国家授时中心。 授时中心的网址是 c...

2013-08-31 20:15:45

阅读数:6794

评论数:0

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

VIM 的作者Bram Moolenaar在一篇叫高效文本编辑器的7个习惯的ppt中有这么一段话。 Three basic steps 1.    Detect inefficiency 2.    Find a quicker way 3.    Make it a habit 即...

2013-08-25 13:08:32

阅读数:5515

评论数:0

飘逸的python - 重载操作符

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

2013-08-25 08:51:50

阅读数:2929

评论数:0

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

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

2013-08-25 00:06:55

阅读数:8343

评论数:0

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

之前在统计导出各区服玩家消费的时候需要进行升序降序混搭的多条件排序。 需求是这样的。区服从小到大排,如果区服相同,则按消费从大到小排。 实现方法是利用python的sort算法是稳定排序,对数据进行多次排序,先排次要条件,后排主要条件。 还有一种更简洁的一行流的方法,不过只有当待排数据是数值...

2013-08-23 00:11:51

阅读数:6551

评论数:5

飘逸的python - 打印螺旋矩阵

算法分析: 螺旋矩阵用二维数组表示,坐标(x,y),即(x轴坐标,y轴坐标) 顺时针螺旋的方向是->右,下,左,上,用数值表示即是x加1格(1,0),y加1格(0,1),x减1格(-1,0),y减1格(0,-1) 坐标从(0,0)开始行走,当超出范围或遇到障碍时切换方向 经过上面...

2013-08-22 00:12:02

阅读数:5284

评论数:2

python第三方库推荐 - dateutil

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

2013-08-21 00:17:38

阅读数:23412

评论数:6

飘逸的python - 赛程表算法

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

2013-08-20 00:09:23

阅读数:4921

评论数:3

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

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

2013-08-18 11:37:30

阅读数:33694

评论数:0

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

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

2013-08-18 00:37:27

阅读数:6158

评论数:4

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

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

2013-08-17 00:20:46

阅读数:11911

评论数:0

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

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

2013-08-16 00:24:56

阅读数:3956

评论数:1

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

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

2013-08-15 00:21:49

阅读数:3962

评论数:5

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

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

2013-08-12 22:01:43

阅读数:4856

评论数:0

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

当我们用open()函数去打开文件的时候,有好几种打开的模式。 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建。 'a'->追加,写到文件末尾 'b'->二进制模式,比如打开图像、音频、word文件。 '+'->更新(可读可写) ...

2013-08-09 08:53:13

阅读数:2706

评论数:0

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

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

2013-08-08 08:21:50

阅读数:7480

评论数:0

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

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

2013-08-07 08:24:33

阅读数:12248

评论数:2

飘逸的python - 发送qq邮件

之前在搞监控预警的时候需要发邮件通知,很简单,就跟呼吸一样。 import smtplib from email.mime.text import MIMEText _user = "sigeken@qq.com" _pwd = "***" _to =...

2013-08-06 08:27:30

阅读数:14217

评论数:3

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

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

2013-08-04 07:58:45

阅读数:2819

评论数:0

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