技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

随笔分类 -  Python

上一页 1 2 3 下一页

python:能自动记录时间,动作发生的所在文件和行数的日志类
摘要:tnLog.py#!/usr/bin/env python# -*- coding: utf-8 -*-import osimport sysimport timeimport loggingimport inspect'''import inspectdef test(): a = inspect.stack()[1] print a得到一个元组,如:(<frame object at 0x8604aa4>, 'test.py', 10, 'function_one', ['\t\tprint get_current 阅读全文

posted @ 2012-08-14 16:28 codestyle 阅读(1768) 评论(0) 推荐(0) 编辑

python:可变参数与apply
摘要:我觉得算是python里相对比较高级的一个用法吧,不知道C里有没有,这里的特殊之处是,由于一个接口已经对外公开了,所以我不能修改函数原型,但是另一个接受了一段参数的函数又需要把它接受到的参数传进已经公开的函数(当然,数据是没有问题的)因此就需要这样做#!/usr/bin/env python# -*- coding: utf-8 -*-'''python里一个很高级的用法:applyapply接受两个参数:函数指针和元组(貌似还有其他更高级的用法)apply调用函数指针执行的函数时,把元组拆成参数列表传递进函数'''import weburls 阅读全文

posted @ 2012-07-27 14:34 codestyle 阅读(414) 评论(0) 推荐(0) 编辑

重构实例1:抽取冗余代码 - 未通过测试而进行的第二次修正
摘要:昨天重构了OPEN-API模块,挺高兴,觉得自己做的不错,结果昨天把程序重构完,除了挑出来作为测试接口的代码其他代码都没有测试,今天上午要做其他的维护工作,觉得还是先跑一次测试再说,测试程序并不是特地为这个接口进行开发,当时为这个OPEN-API写了一个SDK,这个程序其实是为了SDK开发的测试程序,且写的并不完善,但即使是这样,测试程序的断言(assert)仍然报告执行出了问题,因此我又去排查程序,发现有几个接口,它的函数参数不只一个参数(self参数),而我的几类再调具体子类的时,就没有提供其他的参数,因此产生运行时错误,了解到这一点,就翻了手上的《python学习手册》花了一个小时解决问 阅读全文

posted @ 2012-07-27 14:26 codestyle 阅读(488) 评论(0) 推荐(0) 编辑

重构实例1:最初的测试代码
摘要:最初的测试代码还是比较能清晰的反映出代码的意图文件: code.py启动: python code.py查看:http://127.0.0.1:8080/app1http://127.0.0.1:8080/app1?id=100import weburls = ( '/app1', 'App1', '/app2', 'App2',)web.config.debug = Falseapp = web.application(urls, globals())class PageBase: def __init__(self): sel 阅读全文

posted @ 2012-07-26 18:34 codestyle 阅读(264) 评论(0) 推荐(0) 编辑

重构实例1:消除冗余代码
摘要:先描述一下场景:我们的web项目提供了若干个基于HTTP协议的POST接口,用于给第三方的用户写入数据,为了验证写入数据者的身份,这样的接口肯定会要求对方传递身份标识,接口得到标识以后会验证写入者的标识,正确就执行请求,错误就返回失败信息,由于是基于同样的检测身份的机制,每个接口都做了同样的事情,体现在代码里就有大量的冗余代码,如果要消除冗余代码,我可以把冗余代码写成一个函数,在每一个接口里调用,这样的话,也会有大量重复的调用语句,感觉还是不完美,于是思考之后还是借助OO来做这个事情,需要说明的是,我们的语言是python,web项目采用的框架是webpy重构之前的代码class Apply: 阅读全文

posted @ 2012-07-26 17:58 codestyle 阅读(1731) 评论(0) 推荐(0) 编辑

JSON描述的列表转换成为HTML表格类(我觉得编码风格已经好很多了)
摘要:1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import json 5 6 7 SRC_TABLE = { 8 "装修快帐":{"transType":"交易类型", 9 "transDate":"交易日期",10 "currency ":"交易币种",11 "inAcct":u"资金流入帐户",12 "inAmount":" 阅读全文

posted @ 2012-07-26 14:20 codestyle 阅读(762) 评论(0) 推荐(0) 编辑

Python的ASCII, GB2312, Unicode , UTF-8
摘要:ASCII 是一种字符集,包括大小写的英文字母、数字、控制字符等,它用一个字节表示,范围是 0-127Unicode分为UTF-8和UTF-16。UTF-8变长度的,最多 6 个字节,小于 127 的字符用一个字节表示,与 ASCII 字符集的结果一样,ASCII 编码下的英语文本不需要修改就可以当作 UTF-8 编码进行处理。Python 从 2.2 开始支持 Unicode ,函数 decode( char_set )可以实现 其它编码到 Unicode 的转换,函数 encode( char_set )实现 Unicode 到其它编码方式的转换。比如 ("你好").d 阅读全文

posted @ 2012-07-17 11:55 codestyle 阅读(742) 评论(0) 推荐(0) 编辑

运行python-thrift的DEMO
摘要:启动服务器和客户端cd ~/thrift-0.8.0/thrift -r --gen py tutorial.thrift #生成代码cd py./PythonServer.py #启动服务器cd ~/thrift-0.8.0/py./PythonClient.py #在另一个shell窗口启动客户端结果启动服务器的时候产生一个错误shujunli@mysvr1:~/thrift-0.8.0/tutorial/py$ ./PythonServer.py Starting the server...Traceback (most recent call last): File "./P 阅读全文

posted @ 2012-07-09 23:59 codestyle 阅读(835) 评论(0) 推荐(0) 编辑

Apache Thrift 安装配置
摘要:Thrift是Facebook开发出的一个软件库和一组代码生成工具,以加快高效率、可扩展的后端服务的开发与实现的速度。它通过对各语言最常用的部分加以抽象,把它们放进一个通用库里,再用各个语言实现,来实现跨编程语言的高效而可靠的通信。亦即,Thrift允许开发者在一个单独的语言无关的文件里,定义数据类型和服务接口,然后生成用来构建RPC客户和服务器所需的全部代码。从官方网站(http://thrift.apache.org/download/)上下载最新安装包cd ~wget http://www.us.apache.org/dist/thrift/0.8.0/thrift-0.8.0.tar. 阅读全文

posted @ 2012-07-09 23:17 codestyle 阅读(937) 评论(0) 推荐(0) 编辑

python:内存泄漏测试
摘要:#测试内存泄露#import gc#gc.enable()#gc.set_debug(gc.DEBUG_LEAK)#gc.collect()#start = len(gc.garbage)#print aDict[CMD]self._funcmap[ aDict[CMD] ]( aCur, self, aDict )#gc.collect()#end = len(gc.garbage)#if start != end:# print "************************* %d - %d" % (start, end) 阅读全文

posted @ 2012-07-02 11:45 codestyle 阅读(627) 评论(0) 推荐(0) 编辑

【转】如何安装rabbitmq-c-aafba2c665b5这个版本的rabbitmq-c
摘要:http://hi.baidu.com/snowhilloldman/blog/item/a26830dd76b768205882dd30.html照理安装一个库这么简单的东东不应该写一篇垃圾文章,只是,我的真的很痛苦,希望看官们理解!先下载这个库吧:(点了以后文件名会自动变成rabbitmq-c-aafba2c665b5.tar.gz)http://hg.rabbitmq.com/rabbitmq-c/archive/tip.tar.gz这个库的最后更新时间是2010-04-20,姑且命名其版本为:rabbitmq-c-20100420再下载另一个库:(点了以后文件名会自动变成rabbitm 阅读全文

posted @ 2012-06-11 14:35 codestyle 阅读(283) 评论(0) 推荐(0) 编辑

python使用amqp的例子
摘要:web程序需要给IPHONE手机推送消息,移动端同事写好了一个LIB,但是这个LIB使用的是阻塞IO,在APPLE服务器返回前程序是阻塞的,他们用了多线程来解决这个问题,但是webpy运行在apache里,无法进行线程管理,所以就迫切需要一个异步的机制来解决这个问题,希望做到需要发送消息时。调用一个函数,把数据扔进管道或者消息队列后就立即返回,也不管数据是否真的出去了,它相当于生产者,再有一个程序从管道或者队列中读取,进行实际的发送,相当于消费者但是python似乎只封装了IPC(UNIX/LINUX平台进程通信规范)的匿名管道,命名管道的API,并无消息队列,而且管道似乎不易操作,因此想使用 阅读全文

posted @ 2012-06-11 12:37 codestyle 阅读(3439) 评论(1) 推荐(1) 编辑

消息队列:amqp 以及ubuntu安装命令(apt-get)
摘要:(一)基本概念RabbitMQ是流行的开源消息队列系统,用erlang语言开发。我曾经对这门语言挺有兴趣,学过一段时间,后来没坚持。RabbitMQ是AMQP(高级消息队列协议)的标准实现。如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难。不过它也只有几个关键概念,这里简单介绍。RabbitMQ的结构图如下:几个概念说明:Broker:简单来说就是消息队列服务器实体。Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。Queue:消息队列载体,每个消息都会被投入到一个或多个队列。Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。Ro 阅读全文

posted @ 2012-06-11 12:19 codestyle 阅读(964) 评论(0) 推荐(0) 编辑

测试框架设计:初步
摘要:在上次不成功的重构以后,我又蠢蠢欲动的重新设计程序,纠结了许久,还是决定程序写成OO的,OO设计我还没怎么想好,不过这次的重新设计我只写业务逻辑的API,同时编写配套的单元测试,用单元测试来验证API的正确程序结构common/bussiness/data/test/ testMain.pytestMain.py是整个测试的启动点,只要在test目录执行该文件,那么testMain.py就会查找test目录下其他文件,并加载文件里的测试用例一并执行#!/usr/bin/env python# -*- coding: utf-8 -*-import osimport sysimport unit 阅读全文

posted @ 2012-05-17 10:09 codestyle 阅读(308) 评论(0) 推荐(0) 编辑

代码的持续改进
摘要:#!/usr/bin/env python# -*- coding: utf-8 -*-#工厂模式def createDomTree(htmlStream,type='soup'): if type == "soup": return tnDomTreeWithSoup(htmlStream) if type == "lxml": return tnDomTreeWithlXml(htmlStream) return None #外部依赖的接口,它屏蔽了我具体使用的第三方库class tnDomTree: #public... 阅读全文

posted @ 2012-04-10 13:21 codestyle 阅读(227) 评论(0) 推荐(0) 编辑

python:使用OO和工厂模式解决问题
摘要:上次说到,用DOM树的方法替代正则表达式,去匹配替换具有特定属性值的HTML标签,第一次选用的是BeautifulSoup,但是领导更中意lxml这个库,因此我把代码抽取出来抽象成一个接口,让代码依赖接口,而不是具体的实现,代码并不知道我到底使用的是什么第三方库,后来更增加一个工厂方法,让外部连我用的什么类都不让它知道:)#!/usr/bin/env python# -*- coding: utf-8 -*-#工厂模式def createDomTree(htmlStream,type='soup'): if type == "soup": return tn 阅读全文

posted @ 2012-04-09 18:32 codestyle 阅读(562) 评论(0) 推荐(0) 编辑

转:序列化Python对象
摘要:http://woodpecker.org.cn/diveintopython3/serializing.html难度等级: ♦♦♦♦♢❝ Every Saturday since we’ve lived in this apartment, I have awakened at 6:15, poured myself a bowl of cereal, addeda quarter-cup of 2% milk, sat on this end of this couch, turned on BBC America, and watched Doctor Who. ❞— Sheldon, 阅读全文

posted @ 2012-03-27 19:19 codestyle 阅读(935) 评论(0) 推荐(0) 编辑

python:time模块详解
摘要:在平常的代码中,我们常常需要与时间打交道。在Python中,与时间处理有关的模块就包括:time,datetime以及calendar。这篇文章,主要讲解time模块。在开始之前,首先要说明这几点:在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。时间戳(t 阅读全文

posted @ 2012-03-22 13:37 codestyle 阅读(360) 评论(0) 推荐(0) 编辑

Python:序列化
摘要:#对象序列化import pickled={"a":"中国"}a=pickle.dumps(d,2)#序列化二进制print af=open("data","wb")f.write(a)f.close()#对象反序列化import picklef = open("data","rb")a=f.read()d=pickle.loads(a)print d['a']中文也需要被视为二进制数据,pickle.dumps(d,2)第2个参数取值范围是(0,1,2) 2 阅读全文

posted @ 2012-03-18 22:45 codestyle 阅读(269) 评论(0) 推荐(0) 编辑

python: bigint 和 time 互转
摘要:import timedef bigintToDateTime(d): return time.localtime(d)def dateTimeToBigint(d=None): if d==None: d=time.gmtime() return int(time.mktime(d))def stringToDateTime(s): return time.strptime(s, "%Y-%m-%d %H:%M:%S")def dateTimeToSting(d): if d==None: d=time.gmtime() ret... 阅读全文

posted @ 2012-03-06 16:59 codestyle 阅读(1100) 评论(0) 推荐(0) 编辑

上一页 1 2 3 下一页
点击右上角即可分享
微信分享提示