随笔分类 -  python

摘要:__init__ :创建类时最常用的方法,目的是为了初始化对象,相当于java的构造函数NOTE:一个类的所有数据属性应该在这里赋初始值,以节省后面的调试时间,不必为捕捉因使用未初始化(也就是不存在)的属性而导致产生AttributeError异常__new__:创建类实例,具体用法示例可以看http://www.cnblogs.com/bjdxy/archive/2012/12/04/2801649.html__dict__:存储实例属性及值__class__:生成实例的类__base__:所有基类__name__:类名称__method__:实例具有的方法 ,已经废弃,用dir(实例)__ 阅读全文
posted @ 2012-12-04 19:29 践道者 阅读(617) 评论(0) 推荐(0)
摘要:1. id():获取的是对象在内存中的地址2. is :比对2个变量的对象引用(对象在内存中的地址,即id() 获得的值)是否相同。如果相同则返回True,否则返回False。换句话说,就是比对2个变量的对象引用是否指向同一个对象。3. ==:比对2个变量指向的对象的内容是否相同。下面通过cmp函数比较两个对象的差异: 1 class MyClass(object): 2 def __init__(self, name): 3 self.name = name 4 5 def __cmp__(self, other): 6 return cmp... 阅读全文
posted @ 2012-12-04 18:50 践道者 阅读(2432) 评论(0) 推荐(0)
摘要:与__init__一样,每当实例化类时MyClass(*args, **kwargs) ,__new__ 都会默认自动执行MyClass.__new__(*args, **kwargs),如果想改变默认__new__行为,可以对它自定义看一个英寸转换为米例子:1 class inch(float):2 def __new__(cls, arg=0.0):3 return float.__new__(cls, arg * 0.0254)改变了__new__的自定义实例化类inch继承自float如果同时存在__new__ ,__init__则__new__比__init_... 阅读全文
posted @ 2012-12-04 17:07 践道者 阅读(9672) 评论(0) 推荐(2)
摘要:#coding=utf8class FlyBehavior(object): def fly(self):passclass QuackBehavior(object): def quack(self):passclass FlyWithWings(FlyBehavior): def fly(self): return '我会飞的...'class FlyNoWay(FlyBehavior): def fly(self): return '我没办法飞...'class Quack1(QuackBehavior): def quack(s... 阅读全文
posted @ 2012-12-04 15:42 践道者 阅读(329) 评论(0) 推荐(0)
摘要:要掌握py的多线程编程得先了解这个GIL.全局解释器锁(GLOBAL INTERPRETER LOCK):全局解释锁机制保证同一时刻只有一个字节码(bytecode)进程在运行,当前线程想要安全访问对象时,必须先获取GIL,因此,只有获取GIL的线程才有资格去操作py对象或调整py的API函数. 阅读全文
posted @ 2012-12-03 23:23 践道者 阅读(1250) 评论(0) 推荐(0)
摘要:1、NameError:尝试访问一个未申明的变量>>> vNameError: name 'v' is not defined2、ZeroDivisionError:除数为0>>> v = 1/0ZeroDivisionError: int division or modulo by zero3、SyntaxError:语法错误>>> int intSyntaxError: invalid syntax (<pyshell#14>, line 1)4、IndexError:索引超出范围>>> L 阅读全文
posted @ 2012-12-03 16:58 践道者 阅读(7159) 评论(0) 推荐(0)
摘要:handler对象有以下几个,常用的为StreamHandler、FileHandler:StreamHandlerFileHandlerNullHandlerWatchedFileHandlerRotatingFilehandlerTimedRotatingFilehandlerSocketHandlerDatagramHandlerSysLoghandlerMemoryhandlerHTTPHandlerHandler的三个基础操作:1、设置输出格式 设置输出格式要用到的对象是Formatter,初始化方法 formater = logging.Formatter(格式) handler. 阅读全文
posted @ 2012-12-03 14:05 践道者 阅读(1677) 评论(0) 推荐(0)
摘要:import sysis_jython = sys.platform.startswith('java')is_pypy = hasattr(sys, 'pypy_version_info')is_win = (sys.platform == 'win32')is_cygwin = (sys.platform == 'cygwin')is_darwin = (sys.platform == 'darwin') 阅读全文
posted @ 2012-12-03 11:43 践道者 阅读(854) 评论(0) 推荐(0)
摘要:logger:日志对象,logging模块中最基础的对象,用logging.getLogger(name)方法进行初始化,name可以不填。通常logger的名字我们对应模块名,如聊天模块、数据库模块、验证模块等。logger对象的常用方法有:setLevel:设置日志等级日志等级分别有以下几种: CRITICAL : 'CRITICAL', ERROR : 'ERROR', WARNING : 'WARNING', INFO : 'INFO', DEBUG : 'DEBUG', NOTSET : 'NOT 阅读全文
posted @ 2012-12-03 11:40 践道者 阅读(16780) 评论(0) 推荐(1)
摘要:在项目中使用到的一个方法 1 def postToGoogle(self, postData): 2 cookieFile = filepath 3 html = StringIO.StringIO() 4 c = pycurl.Curl() 5 c.fp = html 6 c.setopt(pycurl.URL, loginAction_url) #目标url 7 c.setopt(pycurl.WRITEFUNCTION, html.write) 8 c.setopt(p... 阅读全文
posted @ 2012-12-03 11:01 践道者 阅读(720) 评论(0) 推荐(0)
摘要:lambda 函数好处:1、在不需要再复用的地方用lambda,免去函数名,省去函数定义的过程2、代码更精简示例:g = lambda x : x * 2:左边表示参数,右边表示返回值g(2) # 结果为4示例:过滤少于等于0的数lst = [1,2,3,4,-1,23,0,33]lst2 = filter(lambda n: n>0, lst)print lst2print [i for i in lst if i > 0] #更简单的实现其实能用for in 实现的,比lambda更好,更易读 阅读全文
posted @ 2012-12-01 17:09 践道者 阅读(505) 评论(0) 推荐(0)
摘要:要理解AOP,必须先理解好AOP的一下几个术语:1、 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式)或者基于@Aspect注解的方式来实现。2、连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。3、 通知(Advice):在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知(通知的类型将在后面部分 阅读全文
posted @ 2012-12-01 15:57 践道者 阅读(914) 评论(0) 推荐(0)
摘要:原文:http://sdiehl.github.com/gevent-tutorial/geventFor the Working Python DeveloperWritten by the Gevent Communitygevent is a concurrency library based aroundlibev. It provides a clean API for a variety of concurrency and network related tasks.gevent是一个并发性库基于libev,它提供了一个纯净的API 用来处理各类问题和网络相关任务.Introdu 阅读全文
posted @ 2012-11-27 15:26 践道者 阅读(7887) 评论(2) 推荐(0)
摘要:1、pop方()查看SQLAlchemy的create_engine方法时看到default_strategy = 'plain'strategy = kwargs.pop('strategy', default_strategy)这段代码,不是很理解,查了一下手册,原来字典是有pop方法的,原型:pop(key[, default])说明:If key is in the dictionary, remove it and return its value, else return default. If default is not given and ke 阅读全文
posted @ 2012-11-24 13:49 践道者 阅读(826) 评论(0) 推荐(0)
摘要:具体ORM的详细说明可以看 这里http://baike.baidu.com/view/197951.htmORM方法论基于三个核心原则: 简单:以最基本的形式建模数据。 传达性:数据库结构被任何人都能理解的语言文档化。精确性:基于数据模型创建正确标准化了的结构。现在来看看SQLAlchemy使用方法1、连接数据库create_engine() 如我连接的是mysql数据库 db_config = { 'host': 'xxx.xxx.xxx.xx', 'user': 'root', 'passwd': ' 阅读全文
posted @ 2012-11-24 12:54 践道者 阅读(21585) 评论(1) 推荐(1)
摘要:1 import multiprocessing 2 3 def worker(i): 4 print 'Worker=',i #参数 5 print 'name=', multiprocessing.current_process().name #获取Process实例名称 6 return 7 8 if __name__ == '__main__': 9 jobs = []10 for i in range(5):11 p = multiprocessing.Process(name=str(i), target=worke... 阅读全文
posted @ 2012-11-23 15:49 践道者 阅读(347) 评论(0) 推荐(0)
摘要:项目中有个功能要求将字符串第一个字母改为大写,查了文档及搜索引擎,没找到,自己写了一个,非常简单1 def upperFirstWord(inStr):2 return "%s" % (inStr[:1].upper() + inStr[1:])顺便温习一下下面这几个同类型函数:capitalize() 首字母大写,其余全部小写upper() 全转换成大写lower() 全转换成小写title() 标题首字大写,如"i love python".title() "I love python" 阅读全文
posted @ 2012-11-22 18:19 践道者 阅读(45579) 评论(1) 推荐(0)
摘要:编写python脚本前如果需要找某个库总要搜索引擎一翻,其实py提供更方便、快捷的方法,就是easy_install1、先安装 setuptools或者使用ez_setup.py脚本,安装完后确定easy_install已经在环境变量里了,因为只有这样才能在命令行里直接运行easy_install2、要安装gevent > easy_install gevent MySQLdb > easy_install MySQLdb 它会自动云搜索符合的库去安装,是不是简单了很多?3、显示指定版本 easy_install "MySQL-python==1.2.2"更详细 阅读全文
posted @ 2012-11-22 15:29 践道者 阅读(320) 评论(0) 推荐(0)
摘要:一、插入并保存文档insert方法,如:db.foo.insert({'bar':'baz'})此操作会给文档增加一个"_id"键1、批量插入 多个文档的插入时,使用批量插入比单个一次次插入会快,因为一次批量插入只消耗一个TCP请求,避免许多零碎请求带来的开销,当单个文档发送至数据库时,会有一个头部信息,如果不用批量,则产生多个头部信息以便数据库处理。当前版本mongoDB最大消息长度为16MB,所以插入时会有所限制。 2、插入原理与作用 当行插入时,驱动程序会将数据转换成BSON形式送入数据库,数据库对BSON进行解析、验证(是否有&quo 阅读全文
posted @ 2012-11-19 21:38 践道者 阅读(335) 评论(0) 推荐(0)
摘要:一、文档文档是MongoDB的核心概念,多个键及其关联的值有序地放置在一起便是文档.{"greeting":"Hello,world"}重要概念:1、文档的键/值对是有序的2、文档的键是字符串3、既区分类型也区分大小写4、不能有重复的键二、集合文档相当于关系数据库中的行,集合相当于表.1、无模式,意味着集合里的文档可以是各种各样的为什么要使用多集合?1)分类文档让查询更清晰2)加快查询速度3)数据更集中,减少磁盘寻道操作4)使索引更加有效 2、命名 规则: 集合不能有空字符串 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾 集合名不能以 &q 阅读全文
posted @ 2012-11-17 00:59 践道者 阅读(329) 评论(0) 推荐(0)