Python
文章平均质量分 69
汪星人来地球
这个作者很懒,什么都没留下…
展开
-
sqlalchemy 学习(一)创建Session和Engine
基本概念说到数据库,就离不开Session。Session的主要目的是建立与数据库的会话,它维护你加载和关联的所有数据库对象。它是数据库查询(Query)的一个入口。在Sqlalchemy中,数据库的查询操作是通过Query对象来实现的。而Session提供了创建Query对象的接口。Query对象返回的结果是一组同一映射(Identity Map)对象组成的集合。事实上,集合翻译 2017-02-04 18:04:23 · 13463 阅读 · 0 评论 -
python特性(八):生成器对象的send方法
生成器对象是一个迭代器。但是它比迭代器对象多了一些方法,它们包括send方法,throw方法和close方法。这些方法,主要是用于外部与生成器对象的交互。本文先介绍send方法。send方法有一个参数,该参数指定的是当前被挂起的yield语句的返回值。这样说起来比较抽象,看下面的例子。def MyGenerator(): value = (yield 1) va原创 2017-02-21 19:57:17 · 22084 阅读 · 8 评论 -
Python特性(九):生成器对象的throw方法
上一篇博文介绍的send方法,通过向生成器对象传递参数来实现与生成器对象的交互。本文介绍与生成器对象的另一种方式,即throw方法。它的实现手段是通过向生成器对象在上次被挂起处,抛出一个异常。之后会继续执行生成器对象中后面的语句,直至遇到下一个yield语句返回。如果在生成器对象方法执行完毕后,依然没有遇到yield语句,抛出StopIteration异常。请看下面的例子d原创 2017-05-30 17:08:31 · 5785 阅读 · 3 评论 -
python特性(十):GeneratorExit异常
当一个生成器对象被销毁时,会抛出一个GeneratorExit异常。请看下面的代码。def myGenerator(): try: yield 1 except GeneratorExit: print "myGenerator exited"gen = myGenerator()print gen.next()输出结果原创 2017-05-30 18:18:27 · 3825 阅读 · 0 评论 -
Python特性(十一):生成器对象的close方法
生成器对象的close方法会在生成器对象方法的挂起处抛出一个GeneratorExit异常。GeneratorExit异常产生后,系统会继续把生成器对象方法后续的代码执行完毕。参见下面的代码。def myGenerator(): try: yield 1 print "Statement after yield" except G原创 2017-05-30 19:34:28 · 3545 阅读 · 1 评论 -
Python特性(十二):with语句的执行流程
与传统的高级语言相比,Python添加了两个重要的关键字,即yield和with。yield关键字的用法在前面的几篇博文中已经介绍的较为详细,从本博文开始,介绍with的用法。与with语句密切相关的一个数据结构,叫做context manager。一个context manager类,至少需要定义__enter__和__exit__两个方法。下面是一个最简单的context mana原创 2017-06-03 13:03:26 · 673 阅读 · 0 评论 -
python特性(十三):context manager的__enter__方法
context manager的__enter__和__exit__方法都可以有返回值。__enter__方法的返回值会通过with语句传给调用者,而__exit__方法的返回值是用来控制异常的。本文将介绍__enter__方法。context manager的一个最重要的应用就是IO操作。这里的IO操作包括文件读写,数据库和网络的连接,进程间通信等。通常一个IO操作不可避免有建立连接原创 2017-06-03 17:13:41 · 2260 阅读 · 0 评论 -
Python特性(十五): context manager的__exit__方法对异常的处理
在上一篇博文中说到,当异常在context manager方法的初始化方法和__enter__方法发生时,context manager不会交给__exit__方法处理,而是直接向外抛出。唯有在with语句块抛出的异常,才会交给__exit__方法处理。处理完毕后,__exit__方法可以通过返回值来选择向外抛出异常,也可以丢弃异常。具体来说,当__exit__方法返回值为真时,异常会被抛弃;否则原创 2017-06-11 12:43:59 · 1989 阅读 · 0 评论 -
python特性(三):iter方法
iter方法是python的一个内建方法,它会返回一个迭代器对象。它定义如下iter(o[, sentinel])第一个参数o可以是一个可迭代对象,也可以是一个可调用对象。当参数o是可迭代对象时,第二个参数可省。这里又分为两种情况。如果参数o实现了__iter__方法,则直接调用该方法,创建迭代器。如果参数o没有实现__iter__方法,那么它比是一个序列对象。iter方法原创 2017-02-12 17:37:06 · 10801 阅读 · 0 评论 -
python特性(二):迭代器与for语句
网上许多文章说Python的for语句中,in关键字后面的对象是一个集合。例如for i in [1,2,3] print i上面代码中in关键字后面的对象[1,2,3]是一个list,也是一个集合。但in关键字后面的对象其实不必是一个集合。一个序列对象也是合法的。 例如myrange = MyRange(0, 10)for i in myrange: p原创 2017-02-12 16:50:12 · 838 阅读 · 0 评论 -
sqlalchemy 学习(二)scoped session
数据库设计的难点之一,是session生命周期的管理问题。sqlalchemy提供了一个简单的session管理机制,即scoped session。它采用的注册模式。所谓的注册模式,简单来说,是指在整个程序运行的过程当中,只存在唯一的一个session对象。创建scoped session的方法如下from sqlalchemy.orm import scoped_session翻译 2017-02-04 19:16:45 · 8997 阅读 · 0 评论 -
sqlalchemy学习(三):创建数据库表格
在创建数据库表格之前,首先请保证数据库已经通过mysql命令创建完毕。数据库创建好以后,我们需要定义数据库类型。原创 2017-02-08 11:58:08 · 4326 阅读 · 0 评论 -
sqlalchemy学习(四)ORM model及数据库表的增删改查
目前,许多主流的语言,都实现了对象关系映射(ORM Object Relational Mapper)的库包。ORM的主要功能是将数据库表中的每条记录映射成一个对象。所有的数据库操作,都转化为Sqlalchemy原创 2017-02-08 17:18:35 · 13969 阅读 · 1 评论 -
python特性(四):for语句的工作原理
对于如下的for语句for obj in iterable_obj: do something with obj首先会调用iter方法获取关于iterable_obj对象的迭代器,然后不断调用迭代器对象的next方法,直至抛出异常位置。为了说明这一点,看下面的例子。myiter = MyIterator(1, 4)for i in myiter:原创 2017-02-17 18:23:02 · 1067 阅读 · 0 评论 -
python特性(五):序列诱导的迭代器
如果我们自己要实现iter方法,通过一个序列对象构造出一个迭代器,会怎么做呢?首先需要定义一个迭代器类。class MyIteratorFromSequence: def __init__(self, sequence): self.start = 0 self.sequence = sequence def next(self):原创 2017-02-17 18:50:32 · 458 阅读 · 0 评论 -
python特性(六):yield与迭代器生成器
迭代器是非常高效的类型,无论是从时间复杂度,还是从空间复杂度。而实现迭代器的代码虽然简单,却也繁琐。为此,python定义了一个yield关键字,专门用来构造迭代器。yield有生成,产生的意思。yield的功能和return非常类似,它们都只能在方法中使用。不同的是,包含yield语句的方法被称为生成器方法。当调用生成器方法时,会返回一个生成器对象。例如,看下面的例子。原创 2017-02-20 19:35:12 · 614 阅读 · 0 评论 -
python特性(七):通过生成器函数构造序列对象的迭代器
在前面的博文中介绍过如何构造序列对象的迭代器。本文将通过生成器函数来重写这篇博文的代码。事实上,一个序列对象的迭代器,依赖于一个整数序列的迭代器。看下面的代码。def MyGenerator(len): start = 0 while start < len: yield start start = start + 1原创 2017-02-20 21:46:16 · 533 阅读 · 0 评论 -
python特性(一):序列与xrange对象
说到序列,我们第一想到的是一组有序元素组成的集合。同时,每个元素都有唯一的下标作为索引。在python中,有许多内界的序列。包括元组tuple,列表list,字符串str等。上面提到的序列类型(list,tuple,str)有一个共同的特点,就是当序列对象创建时,需要开辟专门的内存空间,保存序列中的所有元素。换句话说,这些序列对象本质上,是一个集合。例如,下面代码创建了一个原创 2017-02-12 12:19:07 · 1761 阅读 · 0 评论 -
Python特性(十六):由生成器诱导的context manager
通过生成器可以很容易地构造出一个生成器对象。看下面的代码。class MyContextManager: def __init__(self, gen): self.gen = gen def __enter__(self): print "Entering context manager __enter__ method"原创 2017-06-25 21:31:12 · 444 阅读 · 0 评论