From c9157912d94e9cd4494cd4b73bc68300ee0659e3 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 20 Apr 2015 21:26:22 +0800 Subject: [PATCH 001/417] attribute --- 212.md | 2 +- 213.md | 232 +++++++++++++++++++++++++++++++++++++++++++++++++ 2code/21301.py | 47 ++++++++++ 2code/21302.py | 13 +++ index.md | 1 + 5 files changed, 294 insertions(+), 1 deletion(-) create mode 100644 213.md create mode 100644 2code/21301.py create mode 100644 2code/21302.py diff --git a/212.md b/212.md index 6443d27..6653797 100644 --- a/212.md +++ b/212.md @@ -53,7 +53,7 @@ >>> s.season 'the spring of class' -这个其实是指向了类属性中的`Spring.season`,至此,我们其实还没有建立任何类属性呢。下面就建立一个类属性: +这个其实是指向了类属性中的`Spring.season`,至此,我们其实还没有建立任何实例属性呢。下面就建立一个实例属性: >>> s.season = "the spring of instance" >>> s.__dict__ diff --git a/213.md b/213.md new file mode 100644 index 0000000..4ce865b --- /dev/null +++ b/213.md @@ -0,0 +1,232 @@ +>所以,我们不丧胆。外体虽然毁坏,内心却一天新似一天。我们这至暂至轻的苦楚,要为我们成就极重无比永远的荣耀。原来我们不是顾念所见的,乃是顾念所不见的,因为所见的是暂时的,所不见的是永远的。 + +#更多属性(2) + +书接上回,不管是实例还是类,都用`__dict__`来存储属性和方法,可以笼统地把属性和方法称为成员或者特性,用一句笼统的话说,就是`__dict__`存储对象成员。但,有时候访问的对象成员没有存在其中,就是这样: + + >>> class A(object): + ... pass + ... + >>> a = A() + >>> a.x + Traceback (most recent call last): + File "", line 1, in + AttributeError: 'A' object has no attribute 'x' + +`x`不是实例的成员,用`a.x`访问,就出错了,并且错误提示中报告了原因:“'A' object has no attribute 'x'” + +在很多情况下,这种报错是足够的了。但是,在某种我现在还说不出的情况下,你或许不希望这样报错,或许希望能够有某种别的提示、操作等。也就是我们更希望能在成员不存在的时候有所作为,不是等着报错。 + +要处理类似的问题,就要用到本节中的知识了。 + +##`__getattr__`、`__setattr__`和其它类似方法 + +还是用上面的例子,如果访问`a.x`,它不存在,那么就要转向到某个操作。我们把这种情况称之为“拦截”。就好像“寻隐者不遇”,却被童子“遥指杏花村”,将你“拦截”了。在python中,有一些方法就具有这种“拦截”能力。 + +- `__setattr__(self,name,value)`:如果要给name赋值,就调用这个方法。 +- `__getattr__(self,name)`:如果name被访问,同时它不存在的时候,此方法被调用。 +- `__getattribute__(self,name)`:当name被访问时自动被调用(注意:这个仅能用于新式类),无论name是否存在,都要被调用。 +- `__delattr__(self,name)`:如果要删除name,这个方法就被调用。 + +如果一时没有理解,不要紧,是正常的。需要用例子说明。 + + >>> class A(object): + ... def __getattr__(self, name): + ... print "You use getattr" + ... def __setattr__(self, name, value): + ... print "You use setattr" + ... self.__dict__[name] = value + ... + +类A是新式类,除了两个方法,没有别的属性。 + + >>> a = A() + >>> a.x + You use getattr + +`a.x`,按照本节开头的例子,是要报错的。但是,由于在这里使用了`__getattr__(self, name)`方法,当发现`x`不存在于对象的`__dict__`中的时候,就调用了`__getattr__`,即所谓“拦截成员”。 + + >>> a.x = 7 + You use setattr + +给对象的属性赋值时候,调用了`__setattr__(self, name, value)`方法,这个方法中有一句`self.__dict__[name] = value`,通过这个语句,就将属性和数据保存到了对象的`__dict__`中,如果在调用这个属性: + + >>> a.x + 7 + +它已经存在于对象的`__dict__`之中。 + +在上面的类中,当然可以使用`__getattribute__(self, name)`,因为它是新式类。并且,只要访问属性就会调用它。例如: + + >>> class B(object): + ... def __getattribute__(self, name): + ... print "you are useing getattribute" + ... return object.__getattribute__(self, name) + ... + +为了与前面的类区分,新命名一个类名字。需要提醒注意,在这里返回的内容用的是`return object.__getattribute__(self, name)`,而没有使用`return self.__dict__[name]`像是。因为如果用这样的方式,就是访问`self.__dict__`,只要访问这个属性,就要调用`__getattribute__``,这样就导致了无线递归下去(死循环)。要避免之。 + + >>> b = B() + >>> b.y + you are useing getattribute + Traceback (most recent call last): + File "", line 1, in + File "", line 4, in __getattribute__ + AttributeError: 'B' object has no attribute 'y' + >>> b.two + you are useing getattribute + Traceback (most recent call last): + File "", line 1, in + File "", line 4, in __getattribute__ + AttributeError: 'B' object has no attribute 'two' + +访问不存在的成员,可以看到,已经被`__getattribute__`拦截了,虽然最后还是要报错的。 + + >>> b.y = 8 + >>> b.y + you are useing getattribute + 8 + +当给其赋值后,意味着已经在`__dict__`里面了,再调用,依然被拦截,但是由于已经在`__dict__`内,会把结果返回。 + +当你看到这里,是不是觉得上面的方法有点魔力呢?不错。但是,它有什么具体应用呢?看下面的例子,能给你带来启发。 + + #!/usr/bin/env python + # coding=utf-8 + + """ + study __getattr__ and __setattr__ + """ + + class Rectangle(object): + """ + the width and length of Rectangle + """ + def __init__(self): + self.width = 0 + self.length = 0 + + def setSize(self, size): + self.width, self.length = size + def getSize(self): + return self.width, self.length + + if __name__ == "__main__": + r = Rectangle() + r.width = 3 + r.length = 4 + print r.getSize() + r.setSize( (30, 40) ) + print r.width + print r.length + +上面代码来自《Beginning Python:From Novice to Professional,Second Edittion》(by Magnus Lie Hetland),根据本教程的需要,稍作修改。 + + $ python 21301.py + (3, 4) + 30 + 40 + +这段代码已经可以正确运行了。但是,作为一个精益求精的程序员。总觉得那种调用方式还有可以改进的空间。比如,要给长宽赋值的时候,必须赋予一个元组,里面包含长和宽。这个能不能改进一下呢? + + #!/usr/bin/env python + # coding=utf-8 + + """ + study __getattr__ and __setattr__ + """ + + class Rectangle(object): + """ + the width and length of Rectangle + """ + def __init__(self): + self.width = 0 + self.length = 0 + + def setSize(self, size): + self.width, self.length = size + def getSize(self): + return self.width, self.length + + size = property(getSize, setSize) + + if __name__ == "__main__": + r = Rectangle() + r.width = 3 + r.length = 4 + print r.size + r.size = 30, 40 + print r.width + print r.length + +以上代码的运行结果同上。但是,因为加了一句`size = property(getSize, setSize)`,使得调用方法是不是更优雅了呢?原来用`r.getSize()`,现在使用`r.size`,就好像调用一个属性一样。难道你不觉得眼熟吗?在[《多态和封装》](./211.md)中已经用到过property函数了,虽然写法略有差别,但是作用一样。 + +本来,这样就已经足够了。但是,因为本节中出来了特殊方法,所以,一定要用这些特殊方法从新演绎一下这段程序。虽然重新演绎的不一定比原来的好,主要目的是演示本节的特殊方法应用。 + + #!/usr/bin/env python + # coding=utf-8 + + class NewRectangle(object): + def __init__(self): + self.width = 0 + self.length = 0 + + def __setattr__(self, name, value): + if name == "size": + self.width, self.length = value + else: + self.__dict__[name] = value + + def __getattr__(self, name): + if name == "size": + return self.width, self.length + else: + raise AttributeError + + if __name__ == "__main__": + r = NewRectangle() + r.width = 3 + r.length = 4 + print r.size + r.size = 30, 40 + print r.width + print r.length + +除了类的样式变化之外,调用样式没有变。结果是一样的。 + +这就算了解了一些这些属性了吧。但是,有一篇文章是要必须推荐给读者阅读的:[Python Attributes and Methods](http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html),读了这篇文章,对python的对象属性和方法会有更深入的理解。 + +##获得属性顺序 + +通过实例获取其属性(也有说特性的,名词变化了,但是本质都是属性和方法),如果在`__dict__`中有相应的属性,就直接返回其结果;如果没有,会到类属性中找。比如: + + #!/usr/bin/env python + # coding=utf-8 + + class A(object): + author = "qiwsir" + def __getattr__(self, name): + if name != "author": + return "from starter to master." + + if __name__ == "__main__": + a = A() + print a.author + print a.lang + +运行程序: + + $ python 21302.py + qiwsir + from starter to master. + +当`a = A()`后,并没有为实例建立任何属性,或者说实例的`__dict__`是空的,这在上节中已经探讨过了。但是如果要查看`a.author`,因为实例的属性中没有,所以就去类属性中找,发现果然有,于是返回其值`"qiwsir"`。但是,在找`a.lang`的时候,不仅实例属性中没有,类属性中也没有,于是就调用了`__getattr__()`方法。在上面的类中,有这个方法,如果没有`__getattr__()`方法呢?如果没有定义这个方法,就会引发AttributeError,这在前面已经看到了。 + +这就是通过实例查找特性的顺序。 + +------ + +[总目录](./index.md)   |   [上节:更多属性(1)](./212.md)   |   [下节:更多属性(2)](./213.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/21301.py b/2code/21301.py new file mode 100644 index 0000000..fe0fb15 --- /dev/null +++ b/2code/21301.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python +# coding=utf-8 + +""" +study __getattr__ and __setattr__ +""" + +class Rectangle(object): + """ + the width and length of Rectangle + """ + def __init__(self): + self.width = 0 + self.length = 0 + + def setSize(self, size): + self.width, self.length = size + def getSize(self): + return self.width, self.length + size = property(getSize, setSize) + +class NewRectangle(object): + def __init__(self): + self.width = 0 + self.length = 0 + + def __setattr__(self, name, value): + if name == "size": + self.width, self.length = value + else: + self.__dict__[name] = value + + def __getattr__(self, name): + if name == "size": + return self.width, self.length + else: + raise AttributeError + +if __name__ == "__main__": + r = NewRectangle() + r.width = 3 + r.length = 4 + print r.size + r.size = 30, 40 + print r.width + print r.length + diff --git a/2code/21302.py b/2code/21302.py new file mode 100644 index 0000000..34e338c --- /dev/null +++ b/2code/21302.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python +# coding=utf-8 + +class A(object): + author = "qiwsir" + def __getattr__(self, name): + if name != "author": + return "from starter to master." + +if __name__ == "__main__": + a = A() + print a.author + print a.lang diff --git a/index.md b/index.md index cf06995..43476b1 100644 --- a/index.md +++ b/index.md @@ -57,6 +57,7 @@ 10. [类(5)](./210.md)==>静态方法和类方法,两者的区别,类的文档 11. [多态和封装](./211.md)==>多态,封装和私有化 12. [更多属性(1)](./212.md)==>`__dict__`和`__slots__` +13. [更多属性(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序 ##第三部分:模块 From dac8e1a8316af46e2fb1decd2ee34facf074ff25 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 20 Apr 2015 21:31:46 +0800 Subject: [PATCH 002/417] attribute --- 212.md | 4 ++-- 213.md | 4 ++-- index.md | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/212.md b/212.md index 6653797..d2c5293 100644 --- a/212.md +++ b/212.md @@ -1,6 +1,6 @@ >我们既蒙怜悯,受了这职分,就不丧胆,乃将那些暗昧可耻的事弃绝了,不行诡诈,不谬讲神的道理,只将真理表明出来,好在神面前把自己荐与各人的良心。(2 CORINTHIANS 4:1-2) -#更多属性(1) +#特殊方法(1) 探究更多的类属性,在一些初学者的教程中,一般很少见。我之所以要在这里也将这部分奉献出来,就是因为本教程是“From Starter to Master”。当然,不是学习了类的更多属性就能达到Master水平,但是这是通往Master的一步,虽然在初级应用中,本节乃至于后面关于类的属性用的不很多,但是,这一步迈出去,你就会在实践中有一个印象,以后需要用到了,知道有这一步,会对项目有帮助的。俗话说“艺不压身”。 @@ -265,6 +265,6 @@ Spring的类属性没有受到实例属性的影响。 ------ -[总目录](./index.md)   |   [上节:多态和封装](./211.md)   |   [下节:更多属性(2)](./213.md) +[总目录](./index.md)   |   [上节:多态和封装](./211.md)   |   [下节:特殊方法(2)](./213.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/213.md b/213.md index 4ce865b..06f0c90 100644 --- a/213.md +++ b/213.md @@ -1,6 +1,6 @@ >所以,我们不丧胆。外体虽然毁坏,内心却一天新似一天。我们这至暂至轻的苦楚,要为我们成就极重无比永远的荣耀。原来我们不是顾念所见的,乃是顾念所不见的,因为所见的是暂时的,所不见的是永远的。 -#更多属性(2) +#特殊方法(2) 书接上回,不管是实例还是类,都用`__dict__`来存储属性和方法,可以笼统地把属性和方法称为成员或者特性,用一句笼统的话说,就是`__dict__`存储对象成员。但,有时候访问的对象成员没有存在其中,就是这样: @@ -227,6 +227,6 @@ ------ -[总目录](./index.md)   |   [上节:更多属性(1)](./212.md)   |   [下节:更多属性(2)](./213.md) +[总目录](./index.md)   |   [上节:特殊方法(1)](./212.md)   |   [下节:迭代器](./214.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index 43476b1..3b2a592 100644 --- a/index.md +++ b/index.md @@ -56,8 +56,8 @@ 9. [类(4)](./209.md)==>继承,多重继承,super函数 10. [类(5)](./210.md)==>静态方法和类方法,两者的区别,类的文档 11. [多态和封装](./211.md)==>多态,封装和私有化 -12. [更多属性(1)](./212.md)==>`__dict__`和`__slots__` -13. [更多属性(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序 +12. [特殊方法(1)](./212.md)==>`__dict__`和`__slots__` +13. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序 ##第三部分:模块 From 2a9fcb2f6e47ef6f74747179174e9b27ccd22c3d Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 20 Apr 2015 21:45:13 +0800 Subject: [PATCH 003/417] corrected a mistake --- 102.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/102.md b/102.md index c12d528..57f7810 100644 --- a/102.md +++ b/102.md @@ -32,7 +32,7 @@ 上面显示的是在交互模式下,如果输入3,就显示了3,这样的数称为整数,这个称呼和小学数学一样。 -如果输入一个比较打的数,第二个,那么多个3组成的一个整数,在python中称之为长整数。为了表示某个数是长整数,python会在其末尾显示一个L。其实,现在的python已经能够自动将输入的很大的整数视为长整数了。你不必在这方面进行区别。 +如果输入一个比较大的数,第二个,那么多个3组成的一个整数,在python中称之为长整数。为了表示某个数是长整数,python会在其末尾显示一个L。其实,现在的python已经能够自动将输入的很大的整数视为长整数了。你不必在这方面进行区别。 第三个,在数学里面称为小数,这里你依然可以这么称呼,不过就像很多编程语言一样,习惯称之为“浮点数”。至于这个名称的由来,也是有点说道的,有兴趣可以google. From dc968a74b360439f072dc0da583e27eedfd74210 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 20 Apr 2015 21:47:13 +0800 Subject: [PATCH 004/417] readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ecf3cf..eff1e66 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -this +#This is for everyone. + +#From starter to master. From 767b20b811571453a6a613c05f693b0124e3f61c Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 21 Apr 2015 09:49:55 +0800 Subject: [PATCH 005/417] correct --- 212.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/212.md b/212.md index d2c5293..0cf752f 100644 --- a/212.md +++ b/212.md @@ -59,7 +59,7 @@ >>> s.__dict__ {'season': 'the spring of instance'} -这样,实例属性里面就不空了。这时候建立的实例属性和上面的那个`s.season`只不过重名,并且把它“遮盖”了。这句好是不是熟悉?因为在讲述“实力属性”和“类属性”的时候就提到了。现在读者肯定理解更深入了。 +这样,实例属性里面就不空了。这时候建立的实例属性和上面的那个`s.season`只不过重名,并且把它“遮盖”了。这句好是不是熟悉?因为在讲述“实例属性”和“类属性”的时候就提到了。现在读者肯定理解更深入了。 >>> s.__dict__['season'] 'the spring of instance' diff --git a/README.md b/README.md index eff1e66..84c92d8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ #This is for everyone. -#From starter to master. +#From beginner to master. From 9445624672b1809796a21f3ca2da2ad31559a947 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 21 Apr 2015 14:52:31 +0800 Subject: [PATCH 006/417] iterator --- 214.md | 136 +++++++++++++++++++++++++++++++++++++++++++++++++ 2code/21401.py | 30 +++++++++++ 2code/21402.py | 28 ++++++++++ index.md | 1 + 4 files changed, 195 insertions(+) create mode 100644 214.md create mode 100644 2code/21401.py create mode 100644 2code/21402.py diff --git a/214.md b/214.md new file mode 100644 index 0000000..c67475c --- /dev/null +++ b/214.md @@ -0,0 +1,136 @@ +>For freedom Christ has set us free. Stand firm, therefore, and do not submit again to a yoke of slavery. + +>基督释放了我们,叫我们得以自由,所以要站立得稳,不要再被奴仆的轭挟制。(GALATIANS 5:1) + +#迭代器 + +迭代,对于读者已经不陌生了,曾有专门一节来讲述,如果印象不深,请复习[《迭代》](./128.md)。 + +正如读者已知,对序列(列表、元组)、字典和文件都可以用`iter()`方法生成迭代对象,然后用`next()`方法访问。当然,这种访问不是自动的,如果用for循环,就可以自动完成上述访问了。 + +如果用`dir(list)`,`dir(tuple)`,`dir(file)`,`dir(dict)`来查看不同类型对象的属性,会发现它们都有一个名为`__iter__`的东西。这个应该引起读者的关注,因为它和迭代器(iterator)、内置的函数iter()在名字上是一样的,除了前后的双下划线。望文生义,我们也能猜出它肯定是跟迭代有关的东西。当然,这种猜测也不是没有根据的,其重要根据就是英文单词,如果它们之间没有一点关系,肯定不会将命名搞得一样。 + +猜对了。`__iter__`就是对象的一个特殊方法,它是迭代规则(iterator potocol)的基础。或者说,对象如果没有它,就不能返回迭代器,就没有`next()`方法,就不能迭代。 + +>提醒注意,如果读者用的是python3.x,迭代器对象实现的是`__next__()`方法,不是`next()`。并且,在python3.x中有一个内建函数next(),可以实现`next(it)`,访问迭代器,这相当于于python2.x中的`it.next()`(it是迭代对象)。 + +那些类型是list、tuple、file、dict对象有`__iter__()`方法,标着他们能够迭代。这些类型都是python中固有的,我们能不能自己写一个对象,让它能够迭代呢? + +当然呢!要不然python怎么强悍呢。 + + #!/usr/bin/env python + # coding=utf-8 + + """ + the interator as range() + """ + class MyRange(object): + def __init__(self, n): + self.i = 0 + self.n = n + + def __iter__(self): + return self + + def next(self): + if self.i < self.n: + i = self.i + self.i += 1 + return i + else: + raise StopIteration() + + if __name__ == "__main__": + x = MyRange(7) + print "x.next()==>", x.next() + print "x.next()==>", x.next() + print "------for loop--------" + for i in x: + print i + +将代码保存,并运行,结果是: + + $ python 21401.py + x.next()==> 0 + x.next()==> 1 + ------for loop-------- + 2 + 3 + 4 + 5 + 6 + +以上代码的含义,是自己仿写了拥有`range()`的对象,这个对象是可迭代的。分析如下: + +类MyRange的初始化方法`__init__()`就不用赘述了,因为前面已经非常详细分析了这个方法,如果复习,请阅读[《类(2)》](./207md)相关内容。 + +`__iter__()`是类中的核心,它返回了迭代器本身。一个实现了`__iter__()`方法的对象,即意味着其实可迭代的。 + +含有`next()`的对象,就是迭代器,并且在这个方法中,在没有元素的时候要发起`StopIteration()`异常。 + +如果对以上类的调用换一种方式: + + if __name__ == "__main__": + x = MyRange(7) + print list(x) + print "x.next()==>", x.next() + +运行后会出现如下结果: + + $ python 21401.py + [0, 1, 2, 3, 4, 5, 6] + x.next()==> + Traceback (most recent call last): + File "21401.py", line 26, in + print "x.next()==>", x.next() + File "21401.py", line 21, in next + raise StopIteration() + StopIteration + +说明什么呢?`print list(x)`将对象返回值都装进了列表中并打印出来,这个正常运行了。此时指针已经移动到了迭代对象的最后一个,正如在[《迭代》](./128.md)中描述的那样,`next()`方法没有检测也不知道是不是要停止了,它还要继续下去,当继续下一个的时候,才发现没有元素了,于是返回了`StopIteration()`。 + +为什么要将用这种可迭代的对象呢?就像上面例子一样,列表不是挺好的吗? + +列表的确非常好,在很多时候效率很高,并且能够解决相当普遍的问题。但是,不要忘记一点,在某些时候,列表可能会给你带来灾难。因为在你使用列表的时候,需要将列表内容一次性都读入到内存中,这样就增加了内存的负担。如果列表太大太大,就有内存溢出的危险了。这时候需要的是迭代对象。比如斐波那契数列(在本教程多处已经提到这个著名的数列:[《练习》的练习4](./129.md),[《函数(4)》中递归举例](./204.md)): + + #!/usr/bin/env python + # coding=utf-8 + """ + compute Fibonacci by iterator + """ + __metaclass__ = type + + class Fibs: + def __init__(self, max): + self.max = max + self.a = 0 + self.b = 1 + + def __iter__(self): + return self + + def next(self): + fib = self.a + if fib > self.max: + raise StopIteration + self.a, self.b = self.b, self.a + self.b + return fib + + if __name__ == "__main__": + fibs = Fibs(5) + print list(fibs) + +运行结果是: + + $ python 21402.py + [0, 1, 1, 2, 3, 5] + +现在给读者一个思考问题:要在斐波那契数列中找出大于1000的最小的数,能不能在上述代码基础上改造得出呢? + +迭代器的确有迷人之处,但是它也不是万能之物。比如迭代器不能回退,只能如过河的卒子,不断向前。另外,迭代器也不适合在多线程环境中对可变集合使用(这句话可能理解有困难,先混个脸熟吧,等你遇到多线程问题再说)。 + +------ + +[总目录](./index.md)   |   [上节:特殊方法(2)](./213.md)   |   [下节:生成器](./215.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/21401.py b/2code/21401.py new file mode 100644 index 0000000..7425ebe --- /dev/null +++ b/2code/21401.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# coding=utf-8 + +""" +the interator as range() +""" +class MyRange(object): + def __init__(self, n): + self.i = 0 + self.n = n + + def __iter__(self): + return self + + def next(self): + if self.i < self.n: + i = self.i + self.i += 1 + return i + else: + raise StopIteration() + +if __name__ == "__main__": + x = MyRange(7) + print list(x) + print "x.next()==>", x.next() + print "x.next()==>", x.next() + print "------for loop--------" + for i in x: + print i diff --git a/2code/21402.py b/2code/21402.py new file mode 100644 index 0000000..368cd9a --- /dev/null +++ b/2code/21402.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# coding=utf-8 +""" +compute Fibonacci by iterator +""" +__metaclass__ = type + +class Fibs: + def __init__(self, max): + self.max = max + self.a = 0 + self.b = 1 + + def __iter__(self): + return self + + def next(self): + fib = self.a + if fib > self.max: + raise StopIteration + self.a, self.b = self.b, self.a + self.b + return fib + +if __name__ == "__main__": + fibs = Fibs(5) + print list(fibs) + + diff --git a/index.md b/index.md index 3b2a592..ddb1dd3 100644 --- a/index.md +++ b/index.md @@ -58,6 +58,7 @@ 11. [多态和封装](./211.md)==>多态,封装和私有化 12. [特殊方法(1)](./212.md)==>`__dict__`和`__slots__` 13. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序 +14. [迭代器](./214.md)==>迭代器方法`__iter__`,`netx()` ##第三部分:模块 From 6627e5a5a7fe6099f3d13114dbd1d8b6f81b5fea Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 21 Apr 2015 14:52:51 +0800 Subject: [PATCH 007/417] attribute --- 212.md | 2 +- 213.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/212.md b/212.md index 0cf752f..e2398ad 100644 --- a/212.md +++ b/212.md @@ -2,7 +2,7 @@ #特殊方法(1) -探究更多的类属性,在一些初学者的教程中,一般很少见。我之所以要在这里也将这部分奉献出来,就是因为本教程是“From Starter to Master”。当然,不是学习了类的更多属性就能达到Master水平,但是这是通往Master的一步,虽然在初级应用中,本节乃至于后面关于类的属性用的不很多,但是,这一步迈出去,你就会在实践中有一个印象,以后需要用到了,知道有这一步,会对项目有帮助的。俗话说“艺不压身”。 +探究更多的类属性,在一些初学者的教程中,一般很少见。我之所以要在这里也将这部分奉献出来,就是因为本教程是“From Beginner to Master”。当然,不是学习了类的更多属性就能达到Master水平,但是这是通往Master的一步,虽然在初级应用中,本节乃至于后面关于类的属性用的不很多,但是,这一步迈出去,你就会在实践中有一个印象,以后需要用到了,知道有这一步,会对项目有帮助的。俗话说“艺不压身”。 ##`__dict__` diff --git a/213.md b/213.md index 06f0c90..2476c76 100644 --- a/213.md +++ b/213.md @@ -1,4 +1,4 @@ ->所以,我们不丧胆。外体虽然毁坏,内心却一天新似一天。我们这至暂至轻的苦楚,要为我们成就极重无比永远的荣耀。原来我们不是顾念所见的,乃是顾念所不见的,因为所见的是暂时的,所不见的是永远的。 +>所以,我们不丧胆。外体虽然毁坏,内心却一天新似一天。我们这至暂至轻的苦楚,要为我们成就极重无比永远的荣耀。原来我们不是顾念所见的,乃是顾念所不见的,因为所见的是暂时的,所不见的是永远的。(2 CORINTHIANS 4:16-18) #特殊方法(2) From 5753cb8b1d0e7dc8a6f095b19cc85ae927c9f6db Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 22 Apr 2015 21:44:10 +0800 Subject: [PATCH 008/417] iterator --- 204.md | 2 + 214.md | 44 ++++++++- 215.md | 260 +++++++++++++++++++++++++++++++++++++++++++++++++ 2code/21501.py | 14 +++ index.md | 102 ++++++++++--------- 5 files changed, 375 insertions(+), 47 deletions(-) create mode 100644 215.md create mode 100644 2code/21501.py diff --git a/204.md b/204.md index 40300db..b76878f 100644 --- a/204.md +++ b/204.md @@ -106,6 +106,8 @@ filter、map、reduce、lambda、yield 有了它们,最大的好处是程序更简洁;没有它们,程序也可以用别的方式实现,只不过麻烦一些罢了。所以,还是能用则用之吧。更何况,恰当地使用这几个函数,能让别人感觉你更牛X。 +(注:本节不对yield进行介绍,请阅读[《生成器》](./215.md)) + ##lambda lambda函数,是一个只用一行就能解决问题的函数,听着是多么诱人呀。看下面的例子: diff --git a/214.md b/214.md index c67475c..765108b 100644 --- a/214.md +++ b/214.md @@ -125,7 +125,49 @@ $ python 21402.py [0, 1, 1, 2, 3, 5] -现在给读者一个思考问题:要在斐波那契数列中找出大于1000的最小的数,能不能在上述代码基础上改造得出呢? +>给读者一个思考问题:要在斐波那契数列中找出大于1000的最小的数,能不能在上述代码基础上改造得出呢? + +关于列表和迭代器之间的区别,还有两个非常典型的内建函数:`range()`和`xrange()`,研究一下这两个的差异,会有所收获的。 + + range(...) + range(stop) -> list of integers + range(start, stop[, step]) -> list of integers + + >>> dir(range) + ['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] + +从`range()`的帮助文档和方法中可以看出,它的结果是一个列表。但是,如果用`help(xrange)`查看: + + class xrange(object) + | xrange(stop) -> xrange object + | xrange(start, stop[, step]) -> xrange object + | + | Like range(), but instead of returning a list, returns an object that + | generates the numbers in the range on demand. For looping, this is + | slightly faster than range() and more memory efficient. + +`xrange()`返回的是对象,并且进一步告诉我们,类似`range()`,但不是列表。在循环的时候,它跟`range()`相比“slightly faster than range() and more memory efficient”,稍快并更高的内存效率(就是省内存呀)。查看它的方法: + + >>> dir(xrange) + ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__len__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] + +看到令人兴奋的`__iter__`了吗?说明它是可迭代的,它返回的是一个可迭代的对象。 + +也就是说,通过`range()`得到的列表,会一次性被读入内存,而`xrange()`返回的对象,则是需要一个数值才从返回一个数值。比如这样一个应用: + +还记得`zip()`吗? + + >>> a = ["name", "age"] + >>> b = ["qiwsir", 40] + >>> zip(a,b) + [('name', 'qiwsir'), ('age', 40)] + +如果两个列表的个数不一样,就会以短的为准了,比如: + + >>> zip(range(4), xrange(100000000)) + [(0, 0), (1, 1), (2, 2), (3, 3)] + +第一个`range(4)`产生的列表被读入内存;第二个是不是也太长了?但是不用担心,它根本不会产生那么长的列表,因为只需要前4个数值,它就提供前四个数值。如果你要修改为`range(100000000)`,就要花费时间了,可以尝试一下哦。 迭代器的确有迷人之处,但是它也不是万能之物。比如迭代器不能回退,只能如过河的卒子,不断向前。另外,迭代器也不适合在多线程环境中对可变集合使用(这句话可能理解有困难,先混个脸熟吧,等你遇到多线程问题再说)。 diff --git a/215.md b/215.md new file mode 100644 index 0000000..bf138a1 --- /dev/null +++ b/215.md @@ -0,0 +1,260 @@ +>圣灵所结的果子,就是仁爱、喜乐、和平、忍耐、恩慈、良善、信实、温柔、节制。这样的事,没有律法禁止。凡属基督耶稣的人,是已经把肉体连肉体的邪情私欲同钉在十字架上了。我们若是靠圣灵得生,就当靠圣灵行事。不要贪图虚名,彼此惹气,互相嫉妒。(GALATIANS 5:22-26) + +#生成器 + +生成器(英文:generator)是一个非常迷人的东西,也常被认为是python的高级编程技能。不过,我依然很乐意在这里跟读者——尽管你可能是一个初学者——探讨这个话题,因为我相信读者看本教程的目的,绝非仅仅将自己限制于初学者水平,一定有一颗不羁的心——要成为python高手。那么,开始了解生成器吧。 + +还记得上节的“迭代器”吗?生成器和迭代器有着一定的渊源关系。生成器必须是可迭代的,诚然它又不仅仅是迭代器,但除此之外,又没有太多的别的用途,所以,我们可以把它理解为非常方便的自定义迭代器。 + +最这个关系实在感觉有点糊涂了。稍安勿躁,继续阅读即明了。 + +##简单的生成器 + + >>> my_generator = (x*x for x in range(4)) + +这是不是跟列表解析很类似呢?仔细观察,它不是列表,如果这样的得到的才是列表: + + >>> my_list = [x*x for x in range(4)] + +以上两的区别在于是`[]`还是`()`,虽然是细小的差别,但是结果完全不一样。 + + >>> dir(my_generator) + ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', + '__iter__', + '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'gi_code', 'gi_frame', 'gi_running', + 'next', + 'send', 'throw'] + +为了容易观察,我将上述结果进行了重新排版。是不是发现了在迭代器中必有的方法`__inter__()`和`next()`,这说明它是迭代器。如果是迭代器,就可以用for循环来依次读出其值。 + + >>> for i in my_generator: + ... print i + ... + 0 + 1 + 4 + 9 + >>> for i in my_generator: + ... print i + ... + +当第一遍循环的时候,将my_generator里面的值依次读出并打印,但是,当再读一次的时候,就发现没有任何结果。这种特性也正是迭代器所具有的。 + +如果对那个列表,就不一样了: + + >>> for i in my_list: + ... print i + ... + 0 + 1 + 4 + 9 + >>> for i in my_list: + ... print i + ... + 0 + 1 + 4 + 9 + +难道生成器就是把列表解析中的`[]`换成`()`就行了吗?这仅仅是生成器的一种表现形式和使用方法罢了,仿照列表解析式的命名,可以称之为“生成器解析式”(或者:生成器推导式、生成器表达式)。 + +生成器解析式是有很多用途的,在不少地方替代列表,是一个不错的选择。特别是针对大量值的时候,如上节所说的,列表占内存较多,迭代器(生成器是迭代器)的优势就在于少占内存,因此无需将生成器(或者说是迭代器)实例化为一个列表,直接对其进行操作,方显示出其迭代的优势。比如: + + >>> sum(i*i for i in range(10)) + 285 + +请读者注意观察上面的`sum()`运算,不要以为里面少了一个括号,就是这么写。是不是很迷人?如果列表,你不得不: + + >>> sum([i*i for i in range(10)]) + 285 + +通过生成器解析式得到的生成器,掩盖了生成器的一些细节,并且适用领域也有限。下面就要剖析生成器的内部,深入理解这个魔法工具。 + +##定义和执行过程 + +yield这个词在汉语中有“生产、出产”之意,在python中,它作为一个关键词(你在变量、函数、类的名称中就不能用这个了),是生成器的标志。 + + >>> def g(): + ... yield 0 + ... yield 1 + ... yield 2 + ... + >>> g + + +建立了一个非常简单的函数,跟以往看到的函数唯一不同的地方是用了三个yield语句。然后进行下面的操作: + + >>> ge = g() + >>> ge + + >>> type(ge) + + +上面建立的函数返回值是一个生成器(generator)类型的对象。 + + >>> dir(ge) + ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'gi_code', 'gi_frame', 'gi_running', 'next', 'send', 'throw'] + +在这里看到了`__iter__()`和`next()`,说明它是迭代器。既然如此,当然可以: + + >>> ge.next() + 0 + >>> ge.next() + 1 + >>> ge.next() + 2 + >>> ge.next() + Traceback (most recent call last): + File "", line 1, in + StopIteration + +从这个简单例子中可以看出,那个含有yield关键词的函数返回值是一个生成器类型的对象,这个生成器对象就是迭代器。 + +我们把含有yield语句的函数称作生成器。生成器是一种用普通函数语法定义的迭代器。通过上面的例子可以看出,这个生成器(也是迭代器),在定义过程中并没有像上节迭代器那样写`__inter__()`和`next()`,而是只要用了yield语句,那个普通函数就神奇般地成为了生成器,也就具备了迭代器的功能特性。 + +yield语句的作用,就是在调用的时候返回相应的值。详细剖析一下上面的运行过程: + +1. `ge = g()`:除了返回生成器之外,什么也没有操作,任何值也没有被返回。 +2. `ge.next()`:直到这时候,生成器才开始执行,遇到了第一个yield语句,将值返回,并暂停执行(有的称之为挂起)。 +3. `ge.next()`:从上次暂停的位置开始,继续向下执行,遇到yield语句,将值返回,又暂停。 +4. `gen.next()`:重复上面的操作。 +5. `gene.next()`:从上面的挂起位置开始,但是后面没有可执行的了,于是`next()`发出异常。 + +从上面的执行过程中,发现yield除了作为生成器的标志之外,还有一个功能就是返回值。那么它跟return这个返回值有什么区别呢? + +##yield + +为了弄清楚yield和return的区别,我们写两个没有什么用途的函数: + + >>> def r_return(n): + ... print "You taked me." + ... while n > 0: + ... print "before return" + ... return n + ... n -= 1 + ... print "after return" + ... + >>> rr = r_return(3) + You taked me. + before return + >>> rr + 3 + +从函数被调用的过程可以清晰看出,`rr = r_return(3)`,函数体内的语句就开始执行了,遇到return,将值返回,然后就结束函数体内的执行。所以return后面的语句根本没有执行。这是return的特点,关于此特点的详细说明请阅读[《函数(2)》中的返回值相关内容](./202)。 + +下面将return改为yield: + + >>> def y_yield(n): + ... print "You taked me." + ... while n > 0: + ... print "before yield" + ... yield n + ... n -= 1 + ... print "after yield" + ... + >>> yy = y_yield(3) #没有执行函数体内语句 + >>> yy.next() #开始执行 + You taked me. + before yield + 3 #遇到yield,返回值,并暂停 + >>> yy.next() #从上次暂停位置开始继续执行 + after yield + before yield + 2 #又遇到yield,返回值,并暂停 + >>> yy.next() #重复上述过程 + after yield + before yield + 1 + >>> yy.next() + after yield #没有满足条件的值,抛出异常 + Traceback (most recent call last): + File "", line 1, in + StopIteration + +结合注释和前面对执行过程的分析,读者一定能理解yield的特点了,也深知与return的区别了。 + +一般的函数,都是止于return。作为生成器的函数,由于有了yield,则会遇到它挂起,如果还有return,遇到它就直接抛出SoptIteration异常而中止迭代。 + +斐波那契数列已经是老相识了。不论是循环、迭代都用它举例过,现在让我们还用它吧,只不过是要用上yield: + + #!/usr/bin/env python + # coding=utf-8 + + def fibs(max): + """ + 斐波那契数列的生成器 + """ + n, a, b = 0, 0, 1 + while n < max: + yield b + a, b = b, a + b + n = n + 1 + + if __name__ == "__main__": + f = fibs(10) + for i in f: + print i , + +运行结果如下: + + $ python 21501.py + 1 1 2 3 5 8 13 21 34 55 + +用生成器方式实现的斐波那契数列是不是跟以前的有所不同了呢?读者可以将本教程中已经演示过的斐波那契数列实现方式做一下对比,体会各种方法的差异。 + +经过上面的各种例子,已经明确,一个函数中,只要包含了yield语句,它就是生成器,也是迭代器。这种方式显然比前面写迭代器的类要简便多了。但,并不意味着上节的就被抛弃。是生成器还是迭代器,都是根据具体的使用情景而定。 + +##生成器方法 + +在python2.5以后,生成器有了一个新特征,就是在开始运行后能够为生成器提供新的值。这就好似生成器和“外界”之间进行数据交流。 + + >>> def repeater(n): + ... while True: + ... n = (yield n) + ... + >>> r = repeater(4) + >>> r.next() + 4 + >>> r.send("hello") + 'hello' + +当执行到`r.next()`的时候,生成器开始执行,在内部遇到了`yield n`挂起。注意在生成器函数中,`n = (yield n)`中的`yield n`是一个表达式,并将结果赋值给n,虽然不严格要求它必须用圆括号包裹,但是一般情况都这么做,请读者也追随这个习惯。 + +当执行`r.send("hello")`的时候,原来已经被挂起的生成器(函数)又被唤醒,开始执行`n = (yield n)`,也就是讲send()方法发送的值返回。这就是在运行后能够为生成器提供值的含义。 + +如果接下来再执行`r.next()`会怎样? + + >>> r.next() + +什么也没有,其实就是返回了None。按照前面的叙述,读者可以看到,这次执行`r.next()`,由于没有传入任何值,yield返回的就只能是None. + +还要注意,send()方法必须在生成器运行后并挂起才能使用,也就是yield至少被执行一次。如果不是这样: + + >>> s = repeater(5) + >>> s.send("how") + Traceback (most recent call last): + File "", line 1, in + TypeError: can't send non-None value to a just-started generator + +就报错了。但是,可将参数设为None: + + >>> s.send(None) + 5 + +这是返回的是调用函数的时传入的值。 + +此外,还有两个方法:close()和throw() + +- throw(type, value=None, traceback=None):用于在生成器内部(生成器的当前挂起处,或未启动时在定义处)抛出一个异常(在yield表达式中)。 +- close():调用时不用参数,用于关闭生成器。 + +------ + +[总目录](./index.md)   |   [上节:迭代器](./214.md)   |   [下节:异常](./216.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 + + + + \ No newline at end of file diff --git a/2code/21501.py b/2code/21501.py new file mode 100644 index 0000000..fc06099 --- /dev/null +++ b/2code/21501.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +# coding=utf-8 + +def fibs(max): + n, a, b = 0, 0, 1 + while n < max: + yield b + a, b = b, a + b + n = n + 1 + +if __name__ == "__main__": + f = fibs(10) + for i in f: + print i , diff --git a/index.md b/index.md index ddb1dd3..6b58441 100644 --- a/index.md +++ b/index.md @@ -4,63 +4,73 @@ #《零基础学python》(第二版) -##预备动作 +##第一章 预备 1. [关于python的故事](./01.md) 2. [从小工到专家](./02.md) 3. [安装python的开发环境](./03.md) +4. [集成开发环境](./101.md)==>集成开发环境;python的IDE -##第一部分:基础知识 - -1. [集成开发环境](./101.md)==>集成开发环境;python的IDE -2. [数和四则运算](./102.md)==>整数和浮点数;变量;整数溢出问题; -3. [除法](./103.md)==>整数、浮点数相除;`from __future__ import division`;余数;四舍五入; -4. [常用数学函数和运算优先级](./104.md)==>math模块,求绝对值,运算优先级 -5. [写一个简单程序](./105.md)==>程序和语句,注释 -6. [字符串(1)](./106.md)==>字符串定义,转义符,字符串拼接,str()与repr()区别 -7. [字符串(2)](./107.md)==>raw_input,print,内建函数,原始字符串,再做一个小程序 -8. [字符串(3)](./108.md)==>字符串和序列,索引,切片,基本操作 -9. [字符串(4)](./109.md)==>字符串格式化,常用的字符串方法 -10. [字符编码](./110.md)==>编码的基础知识,python中避免汉字乱码 -11. [列表(1)](./111.md)==>列表定义,索引和切片,列表反转,元素追加,基本操作 -12. [列表(2)](./112.md)==>列表append/extend/index/count方法,可迭代的和判断方法,列表原地修改 -13. [列表(3)](./113.md)==>列表pop/remove/reverse/sort方法 -14. [回顾列表和字符串](./114.md)==>比较列表和字符串的相同点和不同点 -15. [元组](./115.md)==>元组定义和基本操作,使用意义 -16. [字典(1)](./116.md)==>字典创建方法、基本操作(长度、读取值、删除值、判断键是否存在) -17. [字典(2)](./117.md)==>字典方法:copy/deepcopy/clear/get/setdefault/items/iteritems/keys/iterkeys/values/itervalues/pop/popitem/update/has_key -18. [集合(1)](./118.md)==>创建集合,集合方法:add/update,pop/remove/discard/clear,可哈希与不可哈希 -19. [集合(2)](./119.md)==>不可变集合,集合关系 -20. [运算符](./120.md)==>算数运算符,比较运算符,逻辑运算符/布尔类型 -21. [语句(1)](./121.md)==>print, import, 赋值语句、增量赋值 -22. [语句(2)](./122.md)==>if...elif...else语句,三元操作 -23. [语句(3)](./123.md)==>for循环,range(),循环字典 -24. [语句(4)](./124.md)==>并行迭代:zip(),enumerate(),list解析 -25. [语句(5)](./125.md)==>while循环,while...else,for...else -26. [文件(1)](./126.md)==>文件打开,读取,写入 -27. [文件(2)](./127.md)==>文件状态,read/readline/readlines,大文件读取,seek -28. [迭代](./128.md)==>迭代含义,iter() -29. [练习](./129.md)==>通过四个练习,综合运用以前所学 -30. [自省](./130.md)==>自省概念,联机帮助,dir(),文档字符串,检查对象,文档 - -##第二部分:函数和类 +##第二章 基本数据类型 + +1. [数和四则运算](./102.md)==>整数和浮点数;变量;整数溢出问题; +2. [除法](./103.md)==>整数、浮点数相除;`from __future__ import division`;余数;四舍五入; +3. [常用数学函数和运算优先级](./104.md)==>math模块,求绝对值,运算优先级 +4. [写一个简单程序](./105.md)==>程序和语句,注释 +5. [字符串(1)](./106.md)==>字符串定义,转义符,字符串拼接,str()与repr()区别 +6. [字符串(2)](./107.md)==>raw_input,print,内建函数,原始字符串,再做一个小程序 +7. [字符串(3)](./108.md)==>字符串和序列,索引,切片,基本操作 +8. [字符串(4)](./109.md)==>字符串格式化,常用的字符串方法 +9. [字符编码](./110.md)==>编码的基础知识,python中避免汉字乱码 +10. [列表(1)](./111.md)==>列表定义,索引和切片,列表反转,元素追加,基本操作 +11. [列表(2)](./112.md)==>列表append/extend/index/count方法,可迭代的和判断方法,列表原地修改 +12. [列表(3)](./113.md)==>列表pop/remove/reverse/sort方法 +13. [回顾列表和字符串](./114.md)==>比较列表和字符串的相同点和不同点 +14. [元组](./115.md)==>元组定义和基本操作,使用意义 +15. [字典(1)](./116.md)==>字典创建方法、基本操作(长度、读取值、删除值、判断键是否存在) +16. [字典(2)](./117.md)==>字典方法:copy/deepcopy/clear/get/setdefault/items/iteritems/keys/iterkeys/values/itervalues/pop/popitem/update/has_key +17. [集合(1)](./118.md)==>创建集合,集合方法:add/update,pop/remove/discard/clear,可哈希与不可哈希 +18. [集合(2)](./119.md)==>不可变集合,集合关系 + +##第三章 语句和文件 + +1. [运算符](./120.md)==>算数运算符,比较运算符,逻辑运算符/布尔类型 +2. [语句(1)](./121.md)==>print, import, 赋值语句、增量赋值 +3. [语句(2)](./122.md)==>if...elif...else语句,三元操作 +4. [语句(3)](./123.md)==>for循环,range(),循环字典 +5. [语句(4)](./124.md)==>并行迭代:zip(),enumerate(),list解析 +6. [语句(5)](./125.md)==>while循环,while...else,for...else +7. [文件(1)](./126.md)==>文件打开,读取,写入 +8. [文件(2)](./127.md)==>文件状态,read/readline/readlines,大文件读取,seek +9. [迭代](./128.md)==>迭代含义,iter() +10. [练习](./129.md)==>通过四个练习,综合运用以前所学 +11. [自省](./130.md)==>自省概念,联机帮助,dir(),文档字符串,检查对象,文档 + +##第四章 函数 1. [函数(1)](./201.md)==>定义函数方法,调用函数方法,命名方法,使用函数注意事项 2. [函数(2)](./202.md)==>函数返回值,函数文档,形参和实参,命名空间,全局变量和局部变量 3. [函数(3)](./203.md)==>收集参数:`*`和`**`,及其逆过程,复习参数知识 4. [函数(4)](./204.md)==>递归和filter、map、reduce、lambda、yield 5. [函数练习](./205.md)==>解一元二次方程,统计考试成绩,找素数 -6. [类(1)](./206.md)==>类的初步认识和基本概念理解:问题空间、对象、面向对象、类和实例化类 -7. [类(2)](./207.md)==>新式类和旧式类,类的命名,构造函数,实例化及方法和属性,self的作用 -8. [类(3)](./208.md)==>类属性和实例属性,类内外数据流转,命名空间、作用域 -9. [类(4)](./209.md)==>继承,多重继承,super函数 -10. [类(5)](./210.md)==>静态方法和类方法,两者的区别,类的文档 -11. [多态和封装](./211.md)==>多态,封装和私有化 -12. [特殊方法(1)](./212.md)==>`__dict__`和`__slots__` -13. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序 -14. [迭代器](./214.md)==>迭代器方法`__iter__`,`netx()` - -##第三部分:模块 + +##第五章 类 + +1. [类(1)](./206.md)==>类的初步认识和基本概念理解:问题空间、对象、面向对象、类和实例化类 +2. [类(2)](./207.md)==>新式类和旧式类,类的命名,构造函数,实例化及方法和属性,self的作用 +3. [类(3)](./208.md)==>类属性和实例属性,类内外数据流转,命名空间、作用域 +4. [类(4)](./209.md)==>继承,多重继承,super函数 +5. [类(5)](./210.md)==>静态方法和类方法,两者的区别,类的文档 +6. [多态和封装](./211.md)==>多态,封装和私有化 +7. [特殊方法(1)](./212.md)==>`__dict__`和`__slots__` +8. [特殊方法(2)](./213.md)==>`__getattr__`,`__setattr__`以及查找属性顺序 +9. [迭代器](./214.md)==>迭代器方法`__iter__`,`netx()` +10. [生成器](./215.md)==>生成器定义,yield,生成器方法 + +##第六章 异常 + + +##第七章 模块 ##第四部分:用Tornado做网站 From dd4ebc796583e8b57b2db4e29bc51fdb8e2873a3 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 22 Apr 2015 21:47:46 +0800 Subject: [PATCH 009/417] iterator --- 215.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/215.md b/215.md index bf138a1..a9cf9f2 100644 --- a/215.md +++ b/215.md @@ -249,6 +249,8 @@ yield语句的作用,就是在调用的时候返回相应的值。详细剖析 - throw(type, value=None, traceback=None):用于在生成器内部(生成器的当前挂起处,或未启动时在定义处)抛出一个异常(在yield表达式中)。 - close():调用时不用参数,用于关闭生成器。 +最后一句,你在编程中,不用生成器也可以。 + ------ [总目录](./index.md)   |   [上节:迭代器](./214.md)   |   [下节:异常](./216.md) From a44cb164868eaab690ab60cb36c5cde19acccb12 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 22 Apr 2015 22:22:23 +0800 Subject: [PATCH 010/417] index --- index.md | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/index.md b/index.md index 6b58441..9fd8b3e 100644 --- a/index.md +++ b/index.md @@ -4,14 +4,16 @@ #《零基础学python》(第二版) -##第一章 预备 +#第壹季 基础 + +##第零章 预备 1. [关于python的故事](./01.md) 2. [从小工到专家](./02.md) 3. [安装python的开发环境](./03.md) 4. [集成开发环境](./101.md)==>集成开发环境;python的IDE -##第二章 基本数据类型 +##第壹章 基本数据类型 1. [数和四则运算](./102.md)==>整数和浮点数;变量;整数溢出问题; 2. [除法](./103.md)==>整数、浮点数相除;`from __future__ import division`;余数;四舍五入; @@ -32,7 +34,7 @@ 17. [集合(1)](./118.md)==>创建集合,集合方法:add/update,pop/remove/discard/clear,可哈希与不可哈希 18. [集合(2)](./119.md)==>不可变集合,集合关系 -##第三章 语句和文件 +##第贰章 语句和文件 1. [运算符](./120.md)==>算数运算符,比较运算符,逻辑运算符/布尔类型 2. [语句(1)](./121.md)==>print, import, 赋值语句、增量赋值 @@ -46,7 +48,7 @@ 10. [练习](./129.md)==>通过四个练习,综合运用以前所学 11. [自省](./130.md)==>自省概念,联机帮助,dir(),文档字符串,检查对象,文档 -##第四章 函数 +##第叁章 函数 1. [函数(1)](./201.md)==>定义函数方法,调用函数方法,命名方法,使用函数注意事项 2. [函数(2)](./202.md)==>函数返回值,函数文档,形参和实参,命名空间,全局变量和局部变量 @@ -54,7 +56,9 @@ 4. [函数(4)](./204.md)==>递归和filter、map、reduce、lambda、yield 5. [函数练习](./205.md)==>解一元二次方程,统计考试成绩,找素数 -##第五章 类 +#第贰季 进阶 + +##第肆章 类 1. [类(1)](./206.md)==>类的初步认识和基本概念理解:问题空间、对象、面向对象、类和实例化类 2. [类(2)](./207.md)==>新式类和旧式类,类的命名,构造函数,实例化及方法和属性,self的作用 @@ -67,12 +71,17 @@ 9. [迭代器](./214.md)==>迭代器方法`__iter__`,`netx()` 10. [生成器](./215.md)==>生成器定义,yield,生成器方法 -##第六章 异常 +##第伍章 异常 + +##第陆章 模块 + +标准库和第三方库 +##第柒章 保存数据 -##第七章 模块 +#第叁季 实战 -##第四部分:用Tornado做网站 +##第捌章 用Tornado做网站 ##第五部分:科学计算 From 5c2b3925b525ecaca78a0aa6e1fe1dafac94239f Mon Sep 17 00:00:00 2001 From: qiwsir Date: Thu, 23 Apr 2015 10:47:58 +0800 Subject: [PATCH 011/417] error --- 215.md | 2 +- 216.md | 242 +++++++++++++++++++++++++++++++++++++++++++++++++ 2code/21601.py | 22 +++++ 2code/21602.py | 18 ++++ index.md | 4 +- 5 files changed, 286 insertions(+), 2 deletions(-) create mode 100644 216.md create mode 100644 2code/21601.py create mode 100644 2code/21602.py diff --git a/215.md b/215.md index a9cf9f2..e0f96df 100644 --- a/215.md +++ b/215.md @@ -253,7 +253,7 @@ yield语句的作用,就是在调用的时候返回相应的值。详细剖析 ------ -[总目录](./index.md)   |   [上节:迭代器](./214.md)   |   [下节:异常](./216.md) +[总目录](./index.md)   |   [上节:迭代器](./214.md)   |   [下节:错误和异常(1)](./216.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 diff --git a/216.md b/216.md new file mode 100644 index 0000000..f76f5e7 --- /dev/null +++ b/216.md @@ -0,0 +1,242 @@ +>因为各人必担当自己的担子。在道理上受教的,当把一切需用的供给施教的人。不要自欺,神是轻慢不得的。人种的是什么,收的也是什么。顺着情欲撒种的,必从情欲收败坏;顺着圣灵撒种的,必从圣灵收永生。我们行善,不可丧志,若不灰心,到了时候就要收成。(GALATIANS 6:5-9) + +#错误和异常(1) + +虽然在前面的学习中,已经遇到了错误和异常问题,但是一直没有很认真的研究它。现在来近距离观察错误和异常。 + +##错误 + +python中的错误之一是语法错误(syntax errors),比如: + + >>> for i in range(10) + File "", line 1 + for i in range(10) + ^ + SyntaxError: invalid syntax + +上面那句话因为缺少冒号`:`,导致解释器无法解释,于是报错。这个报错行为是由python的语法分析器完成的,并且检测到了错误所在文件和行号(`File "", line 1`),还以向上箭头`^`标识错误位置(后面缺少`:`),最后显示错误类型。 + +错误之二是在没有语法错误之后,会出现逻辑错误。逻辑错误可能会由于不完整或者不合法的输入导致,也可能是无法生成、计算等,或者是其它逻辑问题。 + +当python检测到一个错误时,解释器就无法继续执行下去,于是抛出异常。 + +##异常 + +看一个异常(让0做分母了,这是小学生都相信会有异常的): + + >>> 1/0 + Traceback (most recent call last): + File "", line 1, in + ZeroDivisionError: integer division or modulo by zero + +当python抛出异常的时候,首先有“跟踪记录(Traceback)”,还可以给它取一个更优雅的名字“回溯”。后面显示异常的详细信息。异常所在位置(文件、行、在某个模块)。 + +最后一行是错误类型以及导致异常的原因。 + +下表中列出常见的异常 + +|异常 | 描述| +|-----|-----| +|NameError |尝试访问一个没有申明的变量| +|ZeroDivisionError | 除数为0| +|SyntaxError| 语法错误| +|IndexError| 索引超出序列范围| +|KeyError| 请求一个不存在的字典关键字| +|IOError| 输入输出错误(比如你要读的文件不存在)| +|AttributeError| 尝试访问未知的对象属性| + +为了能够深入理解,依次举例,展示异常的出现条件和结果。 + +###NameError + + >>> bar + Traceback (most recent call last): + File "", line 1, in + NameError: name 'bar' is not defined + +python中变量需要初始化,即要赋值。虽然不需要像某些语言那样声明,但是要赋值先。因为变量相当于一个标签,要把它贴到对象上才有意义。 + +###ZeroDivisionError + + >>> 1/0 + Traceback (most recent call last): + File "", line 1, in + ZeroDivisionError: integer division or modulo by zero + +貌似这样简单的错误时不会出现的,但在实际情境中,可能没有这么容易识别,所以,依然要小心为妙。 + +###SyntaxError + + >>> for i in range(10) + File "", line 1 + for i in range(10) + ^ + SyntaxError: invalid syntax + +这种错误发生在python代码编译的时候,当编译到这一句时,解释器不能讲代码转化为python字节码,就报错。只有改正才能继续。所以,它是在程序运行之前就会出现的(如果有错)。现在有不少编辑器都有语法校验功能,在你写代码的时候就能显示出语法的正误,这多少会对编程者有帮助。 + +###IndexError + + >>> a = [1,2,3] + >>> a[4] + Traceback (most recent call last): + File "", line 1, in + IndexError: list index out of range + + >>> d = {"python":"itdiffer.com"} + >>> d["java"] + Traceback (most recent call last): + File "", line 1, in + KeyError: 'java' + +这两个都属于“鸡蛋里面挑骨头”类型,一定得报错了。不过在编程实践中,特别是循环的时候,常常由于循环条件设置不合理出现这种类型的错误。 + +###IOError + + >>> f = open("foo") + Traceback (most recent call last): + File "", line 1, in + IOError: [Errno 2] No such file or directory: 'foo' + +如果你确认有文件,就一定要把路径写正确,因为你并没有告诉python对你的computer进行全身搜索,所以,python会按照你指定位置去找,找不到就异常。 + +###AttributeError + + >>> class A(object): pass + ... + >>> a = A() + >>> a.foo + Traceback (most recent call last): + File "", line 1, in + AttributeError: 'A' object has no attribute 'foo' + +属性不存在。这种错误前面多次见到。 + +其实,python内建的异常也不仅仅上面几个,上面只是列出常见的异常中的几个。比如还有: + + >>> range("aaa") + Traceback (most recent call last): + File "", line 1, in + TypeError: range() integer end argument expected, got str. + +总之,如果读者在调试程序的时候遇到了异常,不要慌张,这是好事情,是python在帮助你修改错误。只要认真阅读异常信息,再用`dir()`,`help()`或者官方网站文档、google等来协助,一定能解决问题。 + +##处理异常 + +在一段程序中,为了能够让程序健壮,必须要处理异常。举例: + + #!/usr/bin/env python + # coding=utf-8 + + while 1: + print "this is a division program." + c = raw_input("input 'c' continue, otherwise logout:") + if c == 'c': + a = raw_input("first number:") + b = raw_input("second number:") + try: + print float(a)/float(b) + print "*************************" + except ZeroDivisionError: + print "The second number can't be zero!" + print "*************************" + else: + break + +运行这段程序,显示如下过程: + + $ python 21601.py + this is a division program. + input 'c' continue, otherwise logout:c + first number:5 + second number:2 + 2.5 + ************************* + this is a division program. + input 'c' continue, otherwise logout:c + first number:5 + second number:0 + The second number can't be zero! + ************************* + this is a division program. + input 'c' continue, otherwise logout:d + $ + +从运行情况看,当在第二个数,即除数为0时,程序并没有因为这个错误而停止,而是给用户一个友好的提示,让用户有机会改正错误。这完全得益于程序中“处理异常”的设置,如果没有“处理异常”,异常出现,就会导致程序终止。 + +处理异常的方式之一,使用`try...except...`。 + +对于上述程序,只看try和except部分,如果没有异常发生,except子句在try语句执行之后被忽略;如果try子句中有异常可,该部分的其它语句被忽略,直接跳到except部分,执行其后面指定的异常类型及其子句。 + +except后面也可以没有任何异常类型,即无异常参数。如果这样,不论try部分发生什么异常,都会执行except。 + +在except子句中,可以根据异常或者别的需要,进行更多的操作。比如: + + #!/usr/bin/env python + # coding=utf-8 + + class Calculator(object): + is_raise = False + def calc(self, express): + try: + return eval(express) + except ZeroDivisionError: + if self.is_raise: + print "zero can not be division." + else: + raise + +在这里,应用了一个函数`eval()`,它的含义是: + + eval(...) + eval(source[, globals[, locals]]) -> value + + Evaluate the source in the context of globals and locals. + The source may be a string representing a Python expression + or a code object as returned by compile(). + The globals must be a dictionary and locals can be any mapping, + defaulting to the current globals and locals. + If only globals is given, locals defaults to it. + +例如: + + >>> eval("3+5") + 8 + +另外,在except子句中,有一个`raise`,作为单独一个语句。它的含义是将异常信息抛出。并且,except子句用了一个判断语句,根据不同的情况确定走不同分支。 + + if __name__ == "__main__": + c = Calculator() + print c.calc("8/0") + +这时候`is_raise = False`,则会: + + $ python 21602.py + Traceback (most recent call last): + File "21602.py", line 17, in + print c.calc("8/0") + File "21602.py", line 8, in calc + return eval(express) + File "", line 1, in + ZeroDivisionError: integer division or modulo by zero + +如果将`is_raise`的值改为True,就是这样了: + + if __name__ == "__main__": + c = Calculator() + c.is_raise = True #通过实例属性修改 + print c.calc("8/0") + +运行结果: + + $ python 21602.py + zero can not be division. + None + +最后的None是`c.calc("8/0")`的返回值,因为有`print c.calc("8/0")`,所以被打印出来。 + +------ + +[总目录](./index.md)   |   [上节:生成器](./215.md)   |   [下节:错误和异常(2)](./217.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/21601.py b/2code/21601.py new file mode 100644 index 0000000..947780f --- /dev/null +++ b/2code/21601.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# coding=utf-8 + +""" +try... except +""" + +while 1: + print "this is a division program." + c = raw_input("input 'c' continue, otherwise logout:") + if c == 'c': + a = raw_input("first number:") + b = raw_input("second number:") + try: + print float(a)/float(b) + print "*************************" + except ZeroDivisionError: + print "The second number can't be zero!" + print "*************************" + else: + break + diff --git a/2code/21602.py b/2code/21602.py new file mode 100644 index 0000000..151ca36 --- /dev/null +++ b/2code/21602.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# coding=utf-8 + +class Calculator(object): + is_raise = False + def calc(self, express): + try: + return eval(express) + except ZeroDivisionError: + if self.is_raise: + print "zero can not be division." + else: + raise + +if __name__ == "__main__": + c = Calculator() + c.is_raise = True + print c.calc("8/0") diff --git a/index.md b/index.md index 9fd8b3e..39cda08 100644 --- a/index.md +++ b/index.md @@ -71,7 +71,9 @@ 9. [迭代器](./214.md)==>迭代器方法`__iter__`,`netx()` 10. [生成器](./215.md)==>生成器定义,yield,生成器方法 -##第伍章 异常 +##第伍章 错误和异常 + +1. [错误和异常(1)](./216.md)==>什么是错误和异常,常见异常类型,处理异常(try...except...) ##第陆章 模块 From 3b7d0330e17bfda89905e95d9e5e847451ca3e31 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 24 Apr 2015 05:18:51 +0800 Subject: [PATCH 012/417] error2 --- 217.md | 229 +++++++++++++++++++++++++++++++++++++++++++++++++ 2code/21701.py | 28 ++++++ 2code/21702.py | 28 ++++++ 2code/21703.py | 14 +++ index.md | 1 + 5 files changed, 300 insertions(+) create mode 100644 217.md create mode 100644 2code/21701.py create mode 100644 2code/21702.py create mode 100644 2code/21703.py diff --git a/217.md b/217.md new file mode 100644 index 0000000..cc40355 --- /dev/null +++ b/217.md @@ -0,0 +1,229 @@ +>你们得救是本乎恩,也因着信。这并不是出于自己,乃是神所赐的;也不是出于行为,免得有人自夸。(EPHESIANS 2:8-9) + +#错误和异常(2) + +try...except...是处理异常的基本方式。在原来的基础上,还可有扩展。 + +##处理多个异常 + +处理多个异常,并不是因为同时报出多个异常。程序在运行中,只要遇到一个异常就会有反应,所以,每次捕获到的异常一定是一个。所谓处理多个异常的意思是可以容许捕获不同的异常,有不同的except子句处理。 + + #!/usr/bin/env python + # coding=utf-8 + + while 1: + print "this is a division program." + c = raw_input("input 'c' continue, otherwise logout:") + if c == 'c': + a = raw_input("first number:") + b = raw_input("second number:") + try: + print float(a)/float(b) + print "*************************" + except ZeroDivisionError: + print "The second number can't be zero!" + print "*************************" + except ValueError: + print "please input number." + print "************************" + else: + break + +将上节的一个程序进行修改,增加了一个except子句,目的是如果用户输入的不是数字时,捕获并处理这个异常。测试如下: + + $ python 21701.py + this is a division program. + input 'c' continue, otherwise logout:c + first number:3 + second number:"hello" #输入了一个不是数字的东西 + please input number. #对照上面的程序,捕获并处理了这个异常 + ************************ + this is a division program. + input 'c' continue, otherwise logout:c + first number:4 + second number:0 + The second number can't be zero! + ************************* + this is a division program. + input 'c' continue, otherwise logout:4 + $ + +如果有多个except,在try里面如果有一个异常,就转到相应的except子句,其它的忽略。如果except没有相应的异常,该异常也会抛出,不过这是程序就要中止了,因为异常“浮出”程序顶部。 + +除了用多个except之外,还可以在一个except后面放多个异常参数,比如上面的程序,可以将except部分修改为: + + except (ZeroDivisionError, ValueError): + print "please input rightly." + print "********************" + +运行的结果就是: + + $ python 21701.py + this is a division program. + input 'c' continue, otherwise logout:c + first number:2 + second number:0 #捕获异常 + please input rightly. + ******************** + this is a division program. + input 'c' continue, otherwise logout:c + first number:3 + second number:a #异常 + please input rightly. + ******************** + this is a division program. + input 'c' continue, otherwise logout:d + $ + +需要注意的是,except后面如果是多个参数,一定要用圆括号包裹起来。否则,后果自负。 + +突然有一种想法,在对异常的处理中,前面都是自己写一个提示语,发现自己写的不如内置的异常错误提示更好。希望把它打印出来。但是程序还能不能中断。python提供了一种方式,将上面代码修改如下: + + while 1: + print "this is a division program." + c = raw_input("input 'c' continue, otherwise logout:") + if c == 'c': + a = raw_input("first number:") + b = raw_input("second number:") + try: + print float(a)/float(b) + print "*************************" + except (ZeroDivisionError, ValueError), e: + print e + print "********************" + else: + break + +运行一下,看看提示信息。 + + $ python 21702.py + this is a division program. + input 'c' continue, otherwise logout:c + first number:2 + second number:a #异常 + could not convert string to float: a + ******************** + this is a division program. + input 'c' continue, otherwise logout:c + first number:2 + second number:0 #异常 + float division by zero + ******************** + this is a division program. + input 'c' continue, otherwise logout:d + $ + +>在python3.x中,常常这样写:`except (ZeroDivisionError, ValueError) as e:` + +以上程序中,之处理了两个异常,还可能有更多的异常呢?如果要处理,怎么办?可以这样:`execpt:`或者`except Exception, e`,后面什么参数也不写就好了。 + +##else子句 + +有了`try...except...`,在一般情况下是够用的,但总有不一般的时候出现,所以,就增加了一个else子句。其实,人类的自然语言何尝不是如此呢?总要根据需要添加不少东西。 + + >>> try: + ... print "I am try" + ... except: + ... print "I am except" + ... else: + ... print "I am else" + ... + I am try + I am else + +这段演示,能够帮助读者理解else的执行特点。如果执行了try,则except被忽略,但是else被执行。 + + >>> try: + ... print 1/0 + ... except: + ... print "I am except" + ... else: + ... print "I am else" + ... + I am except + +这时候else就不被执行了。 + +理解了else的执行特点,可以写这样一段程序,还是类似于前面的计算,只不过这次要求,如果输入的有误,就不断要求从新输入,知道输入正确,并得到了结果,才不再要求输入内容,程序结束。 + +在看下面的参考代码之前,读者是否可以先自己写一段呢?并调试一下,看看结果如何。 + + #!/usr/bin/env python + # coding=utf-8 + while 1: + try: + x = raw_input("the first number:") + y = raw_input("the second number:") + + r = float(x)/float(y) + print r + except Exception, e: + print e + print "try again." + else: + break + +先看运行结果: + + $ python 21703.py + the first number:2 + the second number:0 #异常,执行except + float division by zero + try again. #循环 + the first number:2 + the second number:a #异常 + could not convert string to float: a + try again. + the first number:4 + the second number:2 #正常,执行try + 2.0 #然后else:break,退出程序 + $ + +相当满意的执行结果。 + +需要对程序中的except简单说明,这次没有像前面那样写,而是`except Exception, e`,意思是不管什么异常,这里都会捕获,并且传给变量e,然后用`print e`把异常信息打印出来。 + +##finally + +finally子句,一听这个名字,就感觉它是做善后工作的。的确如此,如果有了finally,不管前面执行的是try,还是except,它都要执行。因此一种说法是用finally用来在可能的异常后进行清理。比如: + + >>> x = 10 + + >>> try: + ... x = 1/0 + ... except Exception, e: + ... print e + ... finally: + ... print "del x" + ... del x + ... + integer division or modulo by zero + del x + +看一看x是否被删除? + + >>> x + Traceback (most recent call last): + File "", line 1, in + NameError: name 'x' is not defined + +当然,在应用中,可以将上面的各个子句都综合起来使用,写成如下样式: + + try: + do something + except: + do something + else: + do something + finally + do something + +##和条件语句相比 + +`try...except...`在某些情况下能够替代`if...else..`的条件语句。这里我无意去比较两者的性能,因为看到有人讨论这个问题。我个人觉得这不是主要的,因为它们之间性能的差异不大。主要是你的选择。一切要根据实际情况而定,不是说用一个就能包打天下。 + +------ + +[总目录](./index.md)   |   [上节:错误和异常(1)](./217.md)   |   [下节:错误和异常(3)](./218.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/21701.py b/2code/21701.py new file mode 100644 index 0000000..dc8bd72 --- /dev/null +++ b/2code/21701.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# coding=utf-8 + +""" +try... except +""" + +while 1: + print "this is a division program." + c = raw_input("input 'c' continue, otherwise logout:") + if c == 'c': + a = raw_input("first number:") + b = raw_input("second number:") + try: + print float(a)/float(b) + print "*************************" + #except ZeroDivisionError: + # print "The second number can't be zero!" + # print "*************************" + #except ValueError: + # print "please input number." + # print "************************" + except (ZeroDivisionError, ValueError): + print "please input rightly." + print "********************" + else: + break + diff --git a/2code/21702.py b/2code/21702.py new file mode 100644 index 0000000..5a703c4 --- /dev/null +++ b/2code/21702.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# coding=utf-8 + +""" +try... except +""" + +while 1: + print "this is a division program." + c = raw_input("input 'c' continue, otherwise logout:") + if c == 'c': + a = raw_input("first number:") + b = raw_input("second number:") + try: + print float(a)/float(b) + print "*************************" + #except ZeroDivisionError: + # print "The second number can't be zero!" + # print "*************************" + #except ValueError: + # print "please input number." + # print "************************" + except: + print "some wrong..." + print "********************" + else: + break + diff --git a/2code/21703.py b/2code/21703.py new file mode 100644 index 0000000..c7af5a9 --- /dev/null +++ b/2code/21703.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +# coding=utf-8 +while 1: + try: + x = raw_input("the first number:") + y = raw_input("the second number:") + + r = float(x)/float(y) + print r + except Exception, b: + print b + print "try again." + else: + break diff --git a/index.md b/index.md index 39cda08..983afd0 100644 --- a/index.md +++ b/index.md @@ -74,6 +74,7 @@ ##第伍章 错误和异常 1. [错误和异常(1)](./216.md)==>什么是错误和异常,常见异常类型,处理异常(try...except...) +2. [错误和异常(2)](./217.md)==>处理多个异常,else子句,finally子句 ##第陆章 模块 From 35d358141988a91eb0121333674380a6b7f5e26c Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 24 Apr 2015 19:35:03 +0800 Subject: [PATCH 013/417] error3 --- 217.md | 2 +- 218.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2code/21801.py | 22 ++++++++++++ index.md | 1 + 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 218.md create mode 100644 2code/21801.py diff --git a/217.md b/217.md index cc40355..2e26de2 100644 --- a/217.md +++ b/217.md @@ -224,6 +224,6 @@ finally子句,一听这个名字,就感觉它是做善后工作的。的确 ------ -[总目录](./index.md)   |   [上节:错误和异常(1)](./217.md)   |   [下节:错误和异常(3)](./218.md) +[总目录](./index.md)   |   [上节:错误和异常(1)](./216.md)   |   [下节:错误和异常(3)](./218.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/218.md b/218.md new file mode 100644 index 0000000..fc9bdba --- /dev/null +++ b/218.md @@ -0,0 +1,90 @@ +>凡事谦虚、温柔、忍耐,用爱心互相宽容,用平和彼此联络,竭力保守圣灵所赐合而为一的心。(EPHESIANS 4:2-3) + +#错误和异常(3) + +按照一般的学习思路,掌握了前两节内容,已经足够编程所需了。但是,我还想再多一步,还是因为本教程的读者是要from beginner to master。 + +##assert + + >>> assert 1==1 + >>> assert 1==0 + Traceback (most recent call last): + File "", line 1, in + AssertionError + +从上面的举例中可以基本了解了assert的特点。 + +assert,翻译过来是“断言”之意。assert是一句等价于布尔真的判定,发生异常就意味着表达式为假。 + +assert的应用情景就有点像汉语的意思一样,当程序运行到某个节点的时候,就断定某个变量的值必然是什么,或者对象必然拥有某个属性等,简单说就是断定什么东西必然是什么,如果不是,就抛出错误。 + + #!/usr/bin/env python + # coding=utf-8 + + class Account(object): + def __init__(self, number): + self.number = number + self.balance = 0 + + def deposit(self, amount): + assert amount > 0 + self.balance += balance + + def withdraw(self, amount): + assert amount > 0 + if amount <= self.balance: + self.balance -= amount + else: + print "balance is not enough." + +上面的程序中,deposit()和withdraw()方法的参数amount值必须是大于零的,这里就用断言,如果不满足条件就会报错。比如这样来运行: + + if __name__ == "__main__": + a = Account(1000) + a.deposit(-10) + +出现的结果是: + + $ python 21801.py + Traceback (most recent call last): + File "21801.py", line 22, in + a.deposit(-10) + File "21801.py", line 10, in deposit + assert amount > 0 + AssertionError + +这就是断言assert的引用。什么是使用断言的最佳时机?有文章做了总结: + +如果没有特别的目的,断言应该用于如下情况: + +- 防御性的编程 +- 运行时对程序逻辑的检测 +- 合约性检查(比如前置条件,后置条件) +- 程序中的常量 +- 检查文档 + +(上述要点来自:[Python 使用断言的最佳时机](http://www.oschina.net/translate/when-to-use-assert) ) + +不论是否理解,可以先看看,请牢记,在具体开发过程中,有时间就回来看看本教程,不断加深对这些概念的理解,这也是master的成就之法。 + +最后,引用危机百科中对“异常处理”词条的说明,作为对“错误和异常”部分的总结(有所删改): + +>异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。 + +>各种编程语言在处理异常方面具有非常显著的不同点(错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束)。某些编程语言有这样的函数:当输入存在非法数据时不能被安全地调用,或者返回值不能与异常进行有效的区别。例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法时可以返回0。在这种情况下编程者需要另外进行错误检测(可能通过某些辅助全局变量如C的errno),或进行输入检验(如通过正则表达式),或者共同使用这两种方法。 + +>通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。 + +>从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。 + +>从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。 + +>一段代码是异常安全的,如果这段代码运行时的失败不会产生有害后果,如内存泄露、存储数据混淆、或无效的输出。 + +>Python语言对异常处理机制是非常普遍深入的,所以想写出不含try, except的程序非常困难。 + +------ + +[总目录](./index.md)   |   [上节:错误和异常(2)](./217.md)   |   [下节:模块(1)](./219.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/21801.py b/2code/21801.py new file mode 100644 index 0000000..9d4884f --- /dev/null +++ b/2code/21801.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# coding=utf-8 + +class Account(object): + def __init__(self, number): + self.number = number + self.balance = 0 + + def deposit(self, amount): + assert amount > 0 + self.balance += balance + + def withdraw(self, amount): + assert amount > 0 + if amount <= self.balance: + self.balance -= amount + else: + print "balance is not enough." + +if __name__ == "__main__": + a = Account(1000) + a.deposit(-10) diff --git a/index.md b/index.md index 983afd0..4d610f1 100644 --- a/index.md +++ b/index.md @@ -75,6 +75,7 @@ 1. [错误和异常(1)](./216.md)==>什么是错误和异常,常见异常类型,处理异常(try...except...) 2. [错误和异常(2)](./217.md)==>处理多个异常,else子句,finally子句 +3. [错误和异常(3)](./218.md)==>assert断言,异常小结 ##第陆章 模块 From 28c5c03b298c9107d76c2c8d8a7556796337375c Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 26 Apr 2015 22:04:41 +0800 Subject: [PATCH 014/417] error3 --- 218.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/218.md b/218.md index fc9bdba..a9ae46b 100644 --- a/218.md +++ b/218.md @@ -85,6 +85,6 @@ assert的应用情景就有点像汉语的意思一样,当程序运行到某 ------ -[总目录](./index.md)   |   [上节:错误和异常(2)](./217.md)   |   [下节:模块(1)](./219.md) +[总目录](./index.md)   |   [上节:错误和异常(2)](./217.md)   |   [下节:编写模块](./219.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file From 4cc1d6eea104c73bced462cbc486b0d78040939b Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 26 Apr 2015 22:05:29 +0800 Subject: [PATCH 015/417] write module --- 219.md | 193 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2code/pm.py | 8 +++ index.md | 4 +- 3 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 219.md create mode 100644 2code/pm.py diff --git a/219.md b/219.md new file mode 100644 index 0000000..1756b2e --- /dev/null +++ b/219.md @@ -0,0 +1,193 @@ +>生气却不可犯罪,不可含怒到日落,也不可给魔鬼留地步。从前偷窃的,不要再偷。总要劳力,亲手作正经事,就可有余,分给那缺少的人。污秽的言语,一句不可出口,只要随事说造就人的好话,叫听见的人得益处。(EPHESIANS 4:26-29) + +#编写模块 + +在本章之前,python还没有显示出太突出的优势。本章开始,读者就会越来越感觉到python的强大了。这种强大体现在“模块自信”上,因为python不仅有很强大的自有模块(称之为标准库),还有海量的第三方模块,任何人还都能自己开发模块,正是有了这么强大的“模块自信”,才体现了python的优势所在。并且这种方式也正在不断被更多其它语言所借鉴。 + +“模块自信”的本质是:开放。 + +python不是一个封闭的体系,是一个开放系统。开放系统的最大好处就是避免了“熵增”。 + +>熵的概念是由德国物理学家克劳修斯于1865年(这一年李鸿章建立了江南机械制造总局,美国废除奴隶制,林肯总统遇刺身亡,美国南北战争结束。)所提出。是一种测量在动力学方面不能做功的能量总数,也就是当总体的熵增加,其做功能力也下降,熵的量度正是能量退化的指标。 + +>熵亦被用于计算一个系统中的失序现象,也就是计算该系统混乱的程度。 + +>根据熵的统计学定义, 热力学第二定律说明一个孤立系统的倾向于增加混乱程度。换句话说就是对于封闭系统而言,会越来越趋向于无序化。反过来,开放系统则能避免无序化。 + +##回忆过去 + +在本教程的[《语句(1)》](./121.md)中,曾经介绍了import语句,有这样一个例子: + + >>> import math + >>> math.pow(3,2) + 9.0 + +这里的math就是一个模块,用import引入这个模块,然后可以使用模块里面的函数,比如这个pow()函数。显然,这里我们是不需要自己动手写具体函数的,我们的任务就是拿过来使用。这就是模块的好处:拿过来就用,不用自己重写。 + +##模块是程序 + +这个标题,一语道破了模块的本质,它就是一个扩展名为`.py`的python程序。我们能够在应该使用它的时候将它引用过来,节省精力,不需要重写雷同的代码。 + +但是,如果我自己写一个`.py`文件,是不是就能作为模块import过来呢?还不那么简单。必须得让python解释器能够找到你写的模块。比如:在某个目录中,我写了这样一个文件: + + #!/usr/bin/env python + # coding=utf-8 + + lang = "python" + +并把它命名为pm.py,那么这个文件就可以作为一个模块被引入。不过由于这个模块是我自己写的,python解释器并不知道,我得先告诉它我写了这样一个文件。 + + >>> import sys + >>> sys.path.append("~/Documents/VBS/StartLearningPython/2code/pm.py") + +用这种方式就是告诉python解释器,我写的那个文件在哪里。在这个告诉方法中,也用了一个模块`import sys`,不过由于sys模块是python被安装的时候就有的,所以不用特别告诉,python解释器就知道它在哪里了。 + +上面那个一长串的地址,是ubuntu系统的地址格式,如果读者使用的windows系统,请写你所保存的文件路径。 + + >>> import pm + >>> pm.lang + 'python' + +本来在pm.py文件中,有一个变量`lang = "python"`,这次它作为模块引入(注意作为模块引入的时候,不带扩展名),就可以通过模块名字来访问变量`pm.py`,当然,如果不存在的属性这么去访问,肯定是要报错的。 + + >>> pm.xx + Traceback (most recent call last): + File "", line 1, in + AttributeError: 'module' object has no attribute 'xx' + +请读者回到pm.py文件的存储目录,是不是多了一个扩展名是.pyc的文件?如果不是,你那个可能是外星人用的python。 + +>解释器,英文是:interpreter,港台翻译为:直译器。在python中,它的作用就是将.py的文件转化为.pyc文件,而.pyc文件是由字节码(bytecode)构成的,然后计算机执行.pyc文件。关于这方面的详细解释,请参阅维基百科的词条:[直譯器](http://zh.wikipedia.org/zh/%E7%9B%B4%E8%AD%AF%E5%99%A8) + +不少人喜欢将这个世界简化简化再简化。比如人,就分为好人还坏人,比如编程语言就分为解释型和编译型,不但如此,还将两种类型的语言分别贴上运行效率高低的标签,解释型的运行速度就慢,编译型的就快。一般人都把python看成解释型的,于是就得出它运行速度慢的结论。不少人都因此上当受骗了,认为python不值得学,或者做不了什么“大事”。这就是将本来复杂的多样化的世界非得划分为“黑白”的结果。这种喜欢用“非此即彼”的思维方式考虑问题的现象可以说在现在很常见,比如一提到“日本人”,除了苍老师,都该杀,这基本上是小孩子的思维方法,可惜在某个过度内大行其道。 + +世界是复杂的,“敌人的敌人就是朋友”是幼稚的,“一分为二”是机械的。当然,苍老师是德艺双馨的。 + +就如同刚才看到的那个.pyc文件一样,当python解释器读取了.py文件,先将它变成由字节码组成的.pyc文件,然后这个.pyc文件交给一个叫做python虚拟机的东西去运行(那些号称编译型的语言也是这个流程,不同的是它们先有一个明显的编译过程,编译好了之后再运行)。如果.py文件修改了,python解释器会重新编译,只是这个编译过程不是完全显示给你看的。 + +我这里说的比较笼统,要深入了解python程序的执行过程,可以阅读这篇文章:[说说Python程序的执行过程](http://www.cnblogs.com/kym/archive/2012/05/14/2498728.html) + +总之,有了.pyc文件后,每次运行,就不需要从新让解释器来编译.py文件了,除非.py文件修改了。这样,python运行的就是那个编译好了的.pyc文件。 + +是否还记得,我们在前面写有关程序,然后执行,常常要用到`if __name__ == "__main__"`。那时我们写的.py文件是来执行的,这时我们同样写了.py文件,是作为模块引入的。这就得深入探究一下,同样是.py文件,它是怎么知道是被当做程序执行还是被当做模块引入? + +为了便于比较,将pm.py文件进行改造,稍微复杂点。 + + #!/usr/bin/env python + # coding=utf-8 + + def lang(): + return "python" + + if __name__ == "__main__": + print lang() + +如以前做的那样,可以用这样的方式: + + $ python pm.py + python + +但是,如果将这个程序作为模块,导入,会是这样的: + + >>> import sys + >>> sys.path.append("~/Documents/VBS/StarterLearningPython/2code/pm.py") + >>> import pm + >>> pm.lang() + 'python' + +因为这时候pm.py中的函数lang()就是一个属性: + + >>> dir(pm) + ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'lang'] + +同样一个.py文件,可以把它当做程序来执行,还可以将它作为模块引入。 + + >>> __name__ + '__main__' + >>> pm.__name__ + 'pm' + +如果要作为程序执行,则`__name__ == "__main__"`;如果作为模块引入,则`pm.__name__ == "pm"`,即变量`__name__`的值是模块名称。 + +用这种方式就可以区分是执行程序还是作为模块引入了。 + +在一般情况下,如果仅仅是用作模块引入,可以不写`if __name__ == "__main__"`。 + +##模块的位置 + +为了让我们自己写的模块能够被python解释器知道,需要用`sys.path.append("~/Documents/VBS/StarterLearningPython/2code/pm.py")`。其实,在python中,所有模块都被加入到了sys.path里面了。用下面的方法可以看到模块所在位置: + + >>> import sys + >>> import pprint + >>> pprint.pprint(sys.path) + ['', + '/usr/local/lib/python2.7/dist-packages/autopep8-1.1-py2.7.egg', + '/usr/local/lib/python2.7/dist-packages/pep8-1.5.7-py2.7.egg', + '/usr/lib/python2.7', + '/usr/lib/python2.7/plat-i386-linux-gnu', + '/usr/lib/python2.7/lib-tk', + '/usr/lib/python2.7/lib-old', + '/usr/lib/python2.7/lib-dynload', + '/usr/local/lib/python2.7/dist-packages', + '/usr/lib/python2.7/dist-packages', + '/usr/lib/python2.7/dist-packages/PILcompat', + '/usr/lib/python2.7/dist-packages/gtk-2.0', + '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', + '~/Documents/VBS/StarterLearningPython/2code/pm.py'] + +从中也发现了我们自己写的那个文件。凡在上面列表所包括位置内的.py文件都可以作为模块引入。不妨举个例子。把前面自己编写的pm.py文件修改为pmlib.py,然后把它复制到`'/usr/lib/python2.7/dist-packages`中。(这是以ubuntu为例说明,如果是其它操作系统,读者用类似方法也能找到。) + + $ sudo cp pm.py /usr/lib/python2.7/dist-packages/pmlib.py + [sudo] password for qw: + + $ ls /usr/lib/python2.7/dist-packages/pm* + /usr/lib/python2.7/dist-packages/pmlib.py + +文件放到了指定位置。看下面的: + + >>> import pmlib + >>> pmlib.lang + + >>> pmlib.lang() + 'python' + +也就是,要将模块文件放到合适的位置——就是sys.path包括位置——就能够直接用import引入了。 + +##PYTHONPATH环境变量 + +将模块文件放到指定位置是一种不错的方法。当程序员都喜欢自由,能不能放到别处呢?当然能,用`sys.path.append()`就是不管把文件放哪里,都可以把其位置告诉python解释器。但是,这种方法不是很常用。因为它也有麻烦的地方,比如在交互模式下,如果关闭了,然后再开启,还得从新告知。 + +比较常用的告知方法是设置PYTHONPATH环境变量。 + +>环境变量,不同操作系统的设置方法略有差异。读者可以根据自己的操作系统,到网上搜索设置方法。 + +我以ubuntu为例,建立一个python的目录,然后将我自己写的.py文件放到这里,并设置环境变量。 + + :~$ mkdir python + :~$ cd python + :~/python$ cp ~/Documents/VBS/StarterLearningPython/2code/pm.py mypm.py + :~/python$ ls + mypm.py + +然后将这个目录`~/python`,也就是`/home/qw/python`设置环境变量。 + + vim /etc/profile + +提醒要用root权限,在打开的文件最后增加`export PATH = /home/qw/python:$PAT`,然后保存退出即可。 + +注意,我是在`~/python`目录下输入`python`,进入到交互模式: + + :~$ cd python + :~/python$ python + + >>> import mypm + >>> mypm.lang() + 'python' + +如此,就完成了告知过程。 + +------ + +[总目录](./index.md)   |   [上节:错误和异常(3)](./218.md)   |   [下节:包](./220.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/pm.py b/2code/pm.py new file mode 100644 index 0000000..6582d63 --- /dev/null +++ b/2code/pm.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python +# coding=utf-8 + +def lang(): + return "python" + +if __name__ == "__main__": + print lang() diff --git a/index.md b/index.md index 4d610f1..a8f5bf4 100644 --- a/index.md +++ b/index.md @@ -1,4 +1,4 @@ -**This is for everyone.** +#This is for everyone. >In the begning when God created the heavens and the earth. the earth was a formless void and darkness covered the face of the deep, while a wind from God swept over the face of the waters. Then God said,"Let there be light"; and there was light. And God saw that the light was good; and God separated the light from the darkness. (GENESIS 1:1-4) @@ -79,6 +79,8 @@ ##第陆章 模块 +1. [编写模块](./219.md)==>模块是程序,模块的位置 + 标准库和第三方库 ##第柒章 保存数据 From 08be13ad7fcc56cc766d45fe2e1fd5a5cdaec17b Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 27 Apr 2015 22:33:09 +0800 Subject: [PATCH 016/417] index at foot --- 03.md | 4 +++- 101.md | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/03.md b/03.md index b21e23c..f557d63 100644 --- a/03.md +++ b/03.md @@ -105,4 +105,6 @@ OK!已经安装好之后,马上就可以开始编程了。 ------- -[总目录](./index.md)   |   [上节:从小工到专家](./02.md) +[总目录](./index.md)   |   [上节:从小工到专家](./02.md)|   [下节:集成开发环境](./101.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 diff --git a/101.md b/101.md index 203f5c0..56438ee 100644 --- a/101.md +++ b/101.md @@ -116,6 +116,6 @@ Windows的朋友操作:“开始”菜单->“所有程序”->“Python 2.x ------ -[总目录](./index.md)   |[   下节](./102.md) +[总目录](./index.md)   |   [上节:安装python的开发环境](./03.md)|[   下节](./102.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 From 6cd844d015ccd738d3aaa8d1aaae098fb6ceb6e4 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 27 Apr 2015 22:36:25 +0800 Subject: [PATCH 017/417] library --- 219.md | 2 +- 220.md | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2code/pm.py | 4 + index.md | 1 + 4 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 220.md diff --git a/219.md b/219.md index 1756b2e..485f823 100644 --- a/219.md +++ b/219.md @@ -188,6 +188,6 @@ python不是一个封闭的体系,是一个开放系统。开放系统的最 ------ -[总目录](./index.md)   |   [上节:错误和异常(3)](./218.md)   |   [下节:包](./220.md) +[总目录](./index.md)   |   [上节:错误和异常(3)](./218.md)   |   [下节:标准库(1)](./220.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/220.md b/220.md new file mode 100644 index 0000000..e63ca45 --- /dev/null +++ b/220.md @@ -0,0 +1,225 @@ +>一切苦毒、恼恨、忿怒、嚷闹、毁谤,并一切的恶毒,都当从你们中间除掉。并要以恩慈相待,存怜悯的心,彼此饶恕,正如神在基督里饶恕了你们一样(EPHESIANS 4:31-32) + +#标准库(1) + +“python自带‘电池’”,听说过这种说法吗? + +在python被安装的时候,就有不少模块也随着安装到本地的计算机上了。这些东西就如同“能源”、“电力”一样,让python拥有了无限生机,能够非常轻而易举地免费使用很多模块。所以,称之为“自带电池”。 + +它们被称为“标准库”。 + +熟悉标准库,是进行编程的必须。 + +##引用的方式 + +不仅使标准库的模块,所有模块都服从下述引用方式。 + +最基本的、也是最常用的,还是可读性非常好的: + + import modulename + +例如: + + >>> import pprint + >>> a = {"lang":"python", "book":"www.itdiffer.com", "teacher":"qiwsir", "goal":"from beginner to master"} + >>> pprint.pprint(a) + {'book': 'www.itdiffer.com', + 'goal': 'from beginner to master', + 'lang': 'python', + 'teacher': 'qiwsir'} + +在对模块进行说明的过程中,我以标准库pprint为例。以`pprint.pprint()`的方式应用了一种方法,这种方法能够让dict格式化输出。看看结果,是不是比原来更容易阅读了你? + +在import后面,理论上可以跟好多模块名称。但是在实践中,我还是建议大家一次一个名称吧。这样简单明了,容易阅读。 + +这是用`import pprint`样式引入模块,并以`.`点号的形式引用其方法。 + +还可以: + + >>> from pprint import pprint + +意思是从`pprint`模块中之将`pprint()`引入,然后就可以这样来应用它: + + >>> pprint(a) + {'book': 'www.itdiffer.com', + 'goal': 'from beginner to master', + 'lang': 'python', + 'teacher': 'qiwsir'} + +再懒惰一些,可以: + + >>> from pprint import * + +这就将pprint模块中的一切都引入了,于是可以像上面那样直接使用每个函数。但是,这样造成的结果是可读性不是很好,并且,有用没用的都拿过来,是不是太贪婪了?贪婪的结果是内存就消耗了不少。所以,这种方法,可以用于常用并且模块属性或方法不是很多的情况。 + +诚然,如果很明确使用那几个,那么使用类似`from modulename import name1, name2, name3...`也未尝不可。一再提醒的是不能因为引入了模块东西而降低了可读性,让别人不知道呈现在眼前的方法是从何而来。如果这样,就要慎用这种方法。 + +有时候引入的模块或者方法名称有点长,可以给它重命名。如: + + >>> import pprint as pr + >>> pr.pprint(a) + {'book': 'www.itdiffer.com', + 'goal': 'from beginner to master', + 'lang': 'python', + 'teacher': 'qiwsir'} + +当然,还可以这样: + + >>> from pprint import pprint as pt + >>> pt(a) + {'book': 'www.itdiffer.com', + 'goal': 'from beginner to master', + 'lang': 'python', + 'teacher': 'qiwsir'} + +但是不管怎么样,一定要让人看懂,过了若干时间,自己也还能看懂。记住:“软件很多时候是给人看的,只是偶尔让机器执行”。 + +##深入探究 + +继续以pprint为例,深入研究: + + >>> import pprint + >>> dir(pprint) + ['PrettyPrinter', '_StringIO', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_commajoin', '_id', '_len', '_perfcheck', '_recursion', '_safe_repr', '_sorted', '_sys', '_type', 'isreadable', 'isrecursive', 'pformat', 'pprint', 'saferepr', 'warnings'] + +对dir()并不陌生。从结果中可以看到pprint的属性和方法。其中有不少是双划线、电话线开头的。为了不影响我们的视觉,先把它们去掉。 + + >>> [ m for m in dir(pprint) if not m.startswith('_') ] + ['PrettyPrinter', 'isreadable', 'isrecursive', 'pformat', 'pprint', 'saferepr', 'warnings'] + +对这几个,为了能够搞清楚它们的含义,可以使用`help()`,比如: + + >>> help(isreadable) + Traceback (most recent call last): + File "", line 1, in + NameError: name 'isreadable' is not defined + +这样做是错误的。知道错在何处吗? + + >>> help(pprint.isreadable) + +别忘记了,我前面是用`import pprint`方式引入模块的。 + + Help on function isreadable in module pprint: + + isreadable(object) + Determine if saferepr(object) is readable by eval(). + +通过帮助信息,能够查看到该方法的详细说明。可以用这种方法一个一个地查过来,反正也不多,对每个方法都熟悉一些。 + +注意的是`pprint.PrettyPrinter`是一个类,后面的是函数(方法)。 + +在回头看看`dir(pprint)`的结果,关注一个: + + >>> pprint.__all__ + ['pprint', 'pformat', 'isreadable', 'isrecursive', 'saferepr', 'PrettyPrinter'] + +这个结果是不是眼熟?除了"warnings",跟前面通过列表解析式得到的结果一样。 + +其实,当我们使用`from pprint import *`的时候,就是将`__all__`里面的方法引入,如果没有这个,就会将其它所有属性、方法等引入,包括那些以双划线或者单划线开头的变量、函数,这些东西事实上很少被在引入模块时使用。 + +##帮助、文档和源码 + +不知道读者是否能够记住看过的上述内容?反正我记不住。所以,我非常喜欢使用dir()和help(),这也是本教程从开始到现在,乃至到以后,总在提倡的方式。 + + >>> print pprint.__doc__ + Support to pretty-print lists, tuples, & dictionaries recursively. + + Very simple, but useful, especially in debugging data structures. + + Classes + ------- + + PrettyPrinter() + Handle pretty-printing operations onto a stream using a configured + set of formatting parameters. + + Functions + --------- + + pformat() + Format a Python object into a pretty-printed representation. + + pprint() + Pretty-print a Python object to a stream [default is sys.stdout]. + + saferepr() + Generate a 'standard' repr()-like value, but protect against recursive + data structures. + +`pprint.__doc__`是查看整个类的文档,还知道整个文档是写在什么地方的吗? + +关于文档的问题,曾经在[《类(5)》](./210.md)、[《自省》](./130.md)中有介绍。但是,现在出现的是模块文档。 + +还是使用pm.py那个文件,增加如下内容: + + #!/usr/bin/env python + # coding=utf-8 + + """ #增加的 + This is a document of the python module. #增加的 + """ #增加的 + + def lang(): + ... #省略了,后面的也省略了 + +在这个文件的开始部分,所有类和方法、以及import之前,写一个用三个引号包括的字符串。那就是文档。 + + >>> import sys + >>> sys.path.append("~/Documents/VBS/StarterLearningPython/2code") + >>> import pm + >>> print pm.__doc__ + + This is a document of the python module. + +这就是撰写模块文档的方法,即在.py文件的最开始写相应的内容。这个要求应该成为开发习惯。 + +python的模块,不仅可以看帮助信息和文档,还能够查看源码,因为它是开放的。 + +还是回头到`dir(pprint)`中找一找,有一个`__file__`,它就告诉我们这个模块的位置: + + >>> print pprint.__file__ + /usr/lib/python2.7/pprint.pyc + +我是在ubuntu中为例,读者要注意观察自己的操作系统结果。 + +虽然是.pyc文件,但是不用担心,根据现实的目录,找到相应的.py文件即可。 + + $ ls /usr/lib/python2.7/pp* + /usr/lib/python2.7/pprint.py /usr/lib/python2.7/pprint.pyc + +果然有一个pprint.py。打开它,就看到源码了。 + + $ cat /usr/lib/python2.7/pprint.py + + ... + + """Support to pretty-print lists, tuples, & dictionaries recursively. + + Very simple, but useful, especially in debugging data structures. + + Classes + ------- + + PrettyPrinter() + Handle pretty-printing operations onto a stream using a configured + set of formatting parameters. + + Functions + --------- + + pformat() + Format a Python object into a pretty-printed representation. + + .... + """ + +我只查抄了文档中的部分信息,是不是跟前面通过`__doc__`查看的结果一样一样的呢? + +请读者在闲暇时间,阅读以下源码。事实证明,这种标准库中的源码是质量最好的。 + +------ + +[总目录](./index.md)   |   [上节:编写模块](./218.md)   |   [下节:标准库(2)](./220.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/pm.py b/2code/pm.py index 6582d63..ff7fa98 100644 --- a/2code/pm.py +++ b/2code/pm.py @@ -1,6 +1,10 @@ #!/usr/bin/env python # coding=utf-8 +""" +This is a document of the python module. +""" + def lang(): return "python" diff --git a/index.md b/index.md index a8f5bf4..151773e 100644 --- a/index.md +++ b/index.md @@ -80,6 +80,7 @@ ##第陆章 模块 1. [编写模块](./219.md)==>模块是程序,模块的位置 +2. [标准库(1)](./220.md)==>引用模块的方式,dir()查看属性和方法,模块文档和帮助 标准库和第三方库 From a76decc3985e02d6eb984b2b037b8c8a95c3856a Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 28 Apr 2015 12:34:19 +0800 Subject: [PATCH 018/417] library --- 220.md | 2 +- 221.md | 228 ++++++++++++++++++++++++++++++++++++++++++++++++ 2code/22101.py | 8 ++ 2code/22102.py | 6 ++ 2code/22103.py | 24 +++++ 2code/stdout.md | 1 + index.md | 2 +- 7 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 221.md create mode 100644 2code/22101.py create mode 100644 2code/22102.py create mode 100644 2code/22103.py create mode 100644 2code/stdout.md diff --git a/220.md b/220.md index e63ca45..ebbf125 100644 --- a/220.md +++ b/220.md @@ -220,6 +220,6 @@ python的模块,不仅可以看帮助信息和文档,还能够查看源码 ------ -[总目录](./index.md)   |   [上节:编写模块](./218.md)   |   [下节:标准库(2)](./220.md) +[总目录](./index.md)   |   [上节:编写模块](./219.md)   |   [下节:标准库(2)](./221.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/221.md b/221.md new file mode 100644 index 0000000..a98db27 --- /dev/null +++ b/221.md @@ -0,0 +1,228 @@ +>所以你们要效法神,好像蒙慈爱的儿女一样。也要凭爱心行事,正如基督爱我们,为我们舍了自己,当作馨香的供物与祭物献与神。至于淫乱并一切污秽,或是贪婪,在你们中间连提都不可,方合圣徒的体统。(EPHESIANS 5:1-3) + +#标准库(2) + +python标准库内容非常多,有人专门为此写过一本书。在本教程中,由于我的原因,不会将标准库进行完整的详细介绍,但是,我根据自己的理解和喜好,选几个呈现出来,一来显示标准库之强大功能,二来演示如何理解和使用标准库。 + +##sys + +这是一个跟python解释器关系密切的标准库,上一节中我们使用过`sys.path.append()`。 + + >>> import sys + >>> print sys.__doc__ + +显示了sys的基本文档,看第一句话,概括了本模块的基本特点。 + + This module provides access to some objects used or maintained by the + interpreter and to functions that interact strongly with the interpreter. + +在诸多sys函数和变量中,选择常用的(应该说是我觉得常用的)来说明。 + +###sys.argv + +sys.argv是变量,专门用来向python解释器传递参数,所以名曰“命令行参数”。 + +先解释什么是命令行参数。 + + $ python --version + Python 2.7.6 + +这里的`--version`就是命令行参数。如果你使用`python --help`可以看到更多: + + $ python --help + usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ... + Options and arguments (and corresponding environment variables): + -B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x + -c cmd : program passed in as string (terminates option list) + -d : debug output from parser; also PYTHONDEBUG=x + -E : ignore PYTHON* environment variables (such as PYTHONPATH) + -h : print this help message and exit (also --help) + -i : inspect interactively after running script; forces a prompt even + if stdin does not appear to be a terminal; also PYTHONINSPECT=x + -m mod : run library module as a script (terminates option list) + -O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x + -OO : remove doc-strings in addition to the -O optimizations + -R : use a pseudo-random salt to make hash() values of various types be + unpredictable between separate invocations of the interpreter, as + a defense against denial-of-service attacks + +只选择了部分内容摆在这里。所看到的如`-B, -h`之流,都是参数,比如`python -h`,其功能同上。那么`-h`也是命令行参数。 + +`sys.arg`在python中的作用就是这样。通过它可以向解释器传递命令行参数。比如: + + #!/usr/bin/env python + # coding=utf-8 + + import sys + + print "The file name: ", sys.argv[0] + print "The number of argument", len(sys.argv) + print "The argument is: ", str(sys.argv) + +将上述代码保存,文件名是22101.py(这名称取的,多么数字化)。然后如此做: + + $ python 22101.py + The file name: 22101.py + The number of argument 1 + The argument is: ['22101.py'] + +将结果和前面的代码做个对照。 + +- 在`$ python 22101.py`中,“22101.py”是要运行的文件名,同时也是命令行参数,是前面的`python`这个指令的参数。其地位与`python -h`中的参数`-h`是等同的。 +- sys.argv[0]是第一个参数,就是上面提到的`22101.py`,即文件名。 + +如果我们这样来试试,看看结果: + + $ python 22101.py beginner master www.itdiffer.com + The file name: 22101.py + The number of argument 4 + The argument is: ['22101.py', 'beginner', 'master', 'www.itdiffer.com'] + +如果在这里,用`sys.arg[1]`得到的就是`beginner`,依次类推。 + +###sys.exit() + +这是一个方法,意思是退出当前的程序。 + + Help on built-in function exit in module sys: + + exit(...) + exit([status]) + + Exit the interpreter by raising SystemExit(status). + If the status is omitted or None, it defaults to zero (i.e., success). + If the status is an integer, it will be used as the system exit status. + If it is another kind of object, it will be printed and the system + exit status will be one (i.e., failure). + +从文档信息中可知,如果用`sys.exit()`退出程序,会返回SystemExit异常。这里先告知读者,还有另外一退出方式,是`os._exit()`,这两个有所区别。后者会在后面介绍。 + + #!/usr/bin/env python + # coding=utf-8 + + import sys + + for i in range(10): + if i == 5: + sys.exit() + else: + print i + +这段程序的运行结果就是: + + $ python 22102.py + 0 + 1 + 2 + 3 + 4 + +需要提醒读者注意的是,在函数中,用到return,这个的含义是终止当前的函数,并返回相应值(如果有,如果没有就是None)。但是sys.exit()的含义是退出当前程序,并发起SystemExit异常。这就是两者的区别了。 + +如果使用`sys.exit(0)`表示正常退出。如果读者要测试,需要在某个地方退出的时候有一个有意义的提示,可以用`sys.exit("I wet out at here.")`,那么字符串信息就被打印出来。 + +###sys.path + +`sys.path`已经不陌生了,前面用过。它可以查找模块所在的目录,以列表的形式显示出来。如果用`append()`方法,就能够向这个列表增加新的模块目录。如前所演示。不在赘述。不理解的读者可以往前复习。 + +###sys.stdin, sys.stdout, sys.stderr + +这三个放到一起,因为他们的变量都是类文件流对象,分别表示标准UNIX概念中的标准输入、标准输出和标准错误。与python功能对照,sys.stdin获得输入(用raw_input()输入的通过它获得,python3.x中是imput()),sys.stdout负责输出了。 + +>流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的。程序在任何时候都可以使用它们。一般来讲,stdin(输入)并不一定来自键盘,stdout(输出)也并不一定显示在屏幕上,它们都可以重定向到磁盘文件或其它设备上。 + +还记得`print()`吧,在这个学习过程中,用的很多。它的本质就是`sys.stdout.write(object + '\n')`。 + + >>> for i in range(3): + ... print i + ... + 0 + 1 + 2 + + >>> import sys + >>> for i in range(3): + ... sys.stdout.write(str(i)) + ... + 012>>> + +造成上面输出结果在表象上如此差异,原因就是那个`'\n'`的有无。 + + >>> for i in range(3): + ... sys.stdout.write(str(i) + '\n') + ... + 0 + 1 + 2 + +从这看出,两者是完全等效的。如果仅仅止于此,意义不大。关键是通过sys.stdout能够做到将输出内容从“控制台”转到“文件”,称之为重定向。这样也许控制台看不到(很多时候这个不重要),但是文件中已经有了输出内容。比如: + + >>> f = open("stdout.md", "w") + >>> sys.stdout = f + >>> print "Learn Python: From Beginner to Master" + >>> f.close() + +当`sys.stdout = f`之后,就意味着将输出目的地转到了打开(建立)的文件中,如果使用print(),即将内容输出到这个文件中,在控制台并无显现。 + +打开文件看看便知: + + $ cat stdout.md + Learn Python: From Beginner to Master + +这是标准输出。另外两个,输入和错误,也类似。读者可以自行测试。 + +关于对文件的操作,虽然前面这这里都涉及到一些。但是,远远不足,后面我会专门讲授对某些特殊但常用的文件读写操作。 + +##copy + +在[《字典(2)》](./117.md)中曾经对copy做了讲授,这里再次提出,即是复习,又是凑数,以显得我考虑到了这个常用模块,还有: + + >>> import copy + >>> copy.__all__ + ['Error', 'copy', 'deepcopy'] + +这个模块中常用的就是copy和deepcopy。 + +为了具体说明,看这样一个例子: + + #!/usr/bin/env python + # coding=utf-8 + + import copy + + class MyCopy(object): + def __init__(self, value): + self.value = value + + def __repr__(self): + return str(self.value) + + foo = MyCopy(7) + + a = ["foo", foo] + b = a[:] + c = list(a) + d = copy.copy(a) + e = copy.deepcopy(a) + + a.append("abc") + foo.value = 17 + + print "original: %r\n slice: %r\n list(): %r\n copy(): %r\n deepcopy(): %r\n" % (a,b,c,d,e) + +保存并运行: + + $ python 22103.py + original: ['foo', 17, 'abc'] + slice: ['foo', 17] + list(): ['foo', 17] + copy(): ['foo', 17] + deepcopy(): ['foo', 7] + +读者可以对照结果和程序,就能理解各种拷贝的实现方法和含义了。 + +------ + +[总目录](./index.md)   |   [上节:标准库(1)](./210.md)   |   [下节:标准库(3)](./222.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/22101.py b/2code/22101.py new file mode 100644 index 0000000..a656fce --- /dev/null +++ b/2code/22101.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python +# coding=utf-8 + +import sys + +print "The file name: ", sys.argv[0] +print "The number of argument", len(sys.argv) +print "The argument is: ", str(sys.argv) diff --git a/2code/22102.py b/2code/22102.py new file mode 100644 index 0000000..b05010e --- /dev/null +++ b/2code/22102.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python +# coding=utf-8 + +import sys + +sys.exit("hello") diff --git a/2code/22103.py b/2code/22103.py new file mode 100644 index 0000000..f874581 --- /dev/null +++ b/2code/22103.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# coding=utf-8 + +import copy + +class MyCopy(object): + def __init__(self, value): + self.value = value + + def __repr__(self): + return str(self.value) + +foo = MyCopy(7) + +a = ["foo", foo] +b = a[:] +c = list(a) +d = copy.copy(a) +e = copy.deepcopy(a) + +a.append("abc") +foo.value = 17 + +print "original: %r\n slice: %r\n list(): %r\n copy(): %r\n deepcopy(): %r\n" % (a,b,c,d,e) diff --git a/2code/stdout.md b/2code/stdout.md new file mode 100644 index 0000000..96e9190 --- /dev/null +++ b/2code/stdout.md @@ -0,0 +1 @@ +Learn Python: From Beginner to Master diff --git a/index.md b/index.md index 151773e..a761e18 100644 --- a/index.md +++ b/index.md @@ -81,8 +81,8 @@ 1. [编写模块](./219.md)==>模块是程序,模块的位置 2. [标准库(1)](./220.md)==>引用模块的方式,dir()查看属性和方法,模块文档和帮助 +3. [标准库(2)](./221.md)==>sys,copy -标准库和第三方库 ##第柒章 保存数据 From 2ea3218dd257f6f3dc0ef901eb92494b6fae3ead Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 29 Apr 2015 11:20:18 +0800 Subject: [PATCH 019/417] library3 --- 221.md | 2 +- 222.md | 311 +++++++++++++++++++++++++++++++++++++++++++++++ 2code/newtemp.py | 4 + index.md | 2 +- 4 files changed, 317 insertions(+), 2 deletions(-) create mode 100644 222.md create mode 100644 2code/newtemp.py diff --git a/221.md b/221.md index a98db27..ef17a6d 100644 --- a/221.md +++ b/221.md @@ -223,6 +223,6 @@ sys.argv是变量,专门用来向python解释器传递参数,所以名曰“ ------ -[总目录](./index.md)   |   [上节:标准库(1)](./210.md)   |   [下节:标准库(3)](./222.md) +[总目录](./index.md)   |   [上节:标准库(1)](./220.md)   |   [下节:标准库(3)](./222.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/222.md b/222.md new file mode 100644 index 0000000..524c93b --- /dev/null +++ b/222.md @@ -0,0 +1,311 @@ +>你们要谨慎行事,不要像愚昧人,当像智慧人。要爱惜光阴,因为现今的世代邪恶。不要作糊涂人,要明白主的旨意如何。不要醉酒,酒能使人放荡,乃要被圣灵充满。(EPHESIANS 4:15-18) + +#标准库(3) + +##OS + +os模块提供了访问操作系统服务的功能,它所包含的内容比较多。 + + >>> import os + >>> dir(os) + ['EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER','EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_OK', 'NGROUPS_MAX', 'O_APPEND', 'O_ASYNC', 'O_CREAT', 'O_DIRECT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_LARGEFILE', 'O_NDELAY', 'O_NOATIME', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_RSYNC', 'O_SYNC', 'O_TRUNC', 'O_WRONLY', 'P_NOWAIT', 'P_NOWAITO', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'ST_APPEND', 'ST_MANDLOCK', 'ST_NOATIME', 'ST_NODEV', 'ST_NODIRATIME', 'ST_NOEXEC', 'ST_NOSUID', 'ST_RDONLY', 'ST_RELATIME', 'ST_SYNCHRONOUS', 'ST_WRITE', 'TMP_MAX', 'UserDict', 'WCONTINUED', 'WCOREDUMP', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list', '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_statvfs_result', '_spawnvef', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'ctermid', 'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdatasync', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'getcwd', 'getcwdu', 'getegid', 'getenv', 'geteuid', 'getgid', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getresgid', 'getresuid', 'getsid', 'getuid', 'initgroups', 'isatty', 'kill', 'killpg', 'lchown', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3', 'popen4', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'rmdir', 'sep', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setregid', 'setresgid', 'setresuid', 'setreuid', 'setsid', 'setuid', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'stat', 'stat_float_times', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'symlink', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'tempnam', 'times', 'tmpfile', 'tmpnam', 'ttyname', 'umask', 'uname', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitpid', 'walk', 'write'] + +这么多内容不能都介绍,况且不少方法在实践中用的不多,比如`os.popen()`在实践中用到了,但是os模块还有popen2、popen3、popen4,这三个我在实践中都没有用过,或者有别人用了,也请补充。不过,我下面介绍的都是自认为用的比较多的,至少是我用的比较多或者用过的。如果没有读者要是用,但是我这里没有介绍,读者也完全可以自己用我们常用的`help()`来自学明白其应用方法,当然,还有最好的工具——google(内事不决问google,外事不明问谷歌,须梯子)。 + +###操作文件:重命名、删除文件 + +在对文件操作的时候,`open()`这个内建函数可以建立、打开文件。但是,如果对文件进行改名、删除操作,就要是用os模块的方法了。 + +首先建立一个文件,文件名为22201.py,文件内容是: + + #!/usr/bin/env python + # coding=utf-8 + + print "This is a tmp file." + +然后将这个文件名称修改为其它的名称。 + + >>> import os + >>> os.rename("22201.py", "newtemp.py") + +注意,我是先进入到了文件22201.py的目录,然后进入到python交互模式,所以,可以直接写文件名,如果不是这样,需要将文件名的路径写上。`os.rename("22201.py", "newtemp.py")`中,第一个文件是原文件名称,第二个是打算修改成为的文件名。 + + $ ls new* + newtemp.py + +查看,能够看到这个文件。并且文件内容可以用`cat newtemp.py`看看(这是在ubuntu系统,如果是windows系统,可以用其相应的编辑器打开文件看内容)。 + + Help on built-in function rename in module posix: + + rename(...) + rename(old, new) + + Rename a file or directory. + +除了修改文件名称,还可以修改目录名称。请注意阅读帮助信息。 + +另外一个os.remove(),首先看帮助信息,然后再实验。 + + Help on built-in function remove in module posix: + + remove(...) + remove(path) + + Remove a file (same as unlink(path)). + +比较简单。那就测试一下。为了测试,先建立一些文件吧。 + + $ pwd + /home/qw/Documents/VBS/StarterLearningPython/2code/rd + +这是我建立的临时目录,里面有几个文件: + + $ ls + a.py b.py c.py + +下面删除a.py文件 + + >>> import os + >>> os.remove("/home/qw/Documents/VBS/StarterLearningPython/2code/rd/a.py") + +看看删了吗? + + $ ls + b.py c.py + +果然管用呀。再来一个狠的: + + >>> os.remove("/home/qw/Documents/VBS/StarterLearningPython/2code/rd") + Traceback (most recent call last): + File "", line 1, in + OSError: [Errno 21] Is a directory: '/home/qw/Documents/VBS/StarterLearningPython/2code/rd' + +报错了。我打算将这个目录下的所剩文件删光光。这么做不行。注意帮助中一句话`Remove a file`,os.remove()就是用来删除文件的。并且从报错中也可以看到,告诉我们错误的原因在于那个参数是一个目录。 + +要删除目录,还得继续向下学习。 + +###操作目录 + +**os.listdir**:显示目录中的文件 + + Help on built-in function listdir in module posix: + + listdir(...) + listdir(path) -> list_of_strings + + Return a list containing the names of the entries in the directory. + + path: path of directory to list + + The list is in arbitrary order. It does not include the special + entries '.' and '..' even if they are present in the directory. + +看完帮助信息,读者一定觉得这是一个非常简单的方法,不过,特别注意它返回的值是列表,还有就是如果文件夹中有那样的特殊格式命名的文件,不显示。在linux中,用ls命令也看不到这些隐藏的东东。 + + >>> os.listdir("/home/qw/Documents/VBS/StarterLearningPython/2code/rd") + ['b.py', 'c.py'] + >>> files = os.listdir("/home/qw/Documents/VBS/StarterLearningPython/2code/rd") + >>> for f in files: + ... print f + ... + b.py + c.py + +**os.getcwd, os.chdir**:当前工作目录,改变当前工作目录 + +这两个函数怎么用?惟有通过`help()`看文档啦。请读者自行看看。我就不贴出来了,仅演示一个例子: + + >>> cwd = os.getcwd() #当前目录 + >>> print cwd + /home/qw/Documents/VBS/StarterLearningPython/2code/rd + >>> os.chdir(os.pardir) #进入到上一级 + + >>> os.getcwd() #当前 + '/home/qw/Documents/VBS/StarterLearningPython/2code' + + >>> os.chdir("rd") #进入下级 + + >>> os.getcwd() + '/home/qw/Documents/VBS/StarterLearningPython/2code/rd' + +`os.pardir`的功能是获得父级目录,相当于`..` + + >>> os.pardir + '..' + + +**os.makedirs, os.removedirs**:创建和删除目录 + +废话少说,路子还是前面那样,就省略看帮助了,读者可以自己看。直接上例子: + + >>> dir = os.getcwd() + >>> dir + '/home/qw/Documents/VBS/StarterLearningPython/2code/rd' + >>> os.removedirs(dir) + Traceback (most recent call last): + File "", line 1, in + File "/usr/lib/python2.7/os.py", line 170, in removedirs + rmdir(name) + OSError: [Errno 39] Directory not empty: '/home/qw/Documents/VBS/StarterLearningPython/2code/rd' + +什么时候都不能得意忘形,一定要谦卑。那就是从看文档开始一点一点地理解。不能像上面那样,自以为是、贸然行事。看报错信息,要删除某个目录,那个目录必须是空的。 + + >>> os.getcwd() + '/home/qw/Documents/VBS/StarterLearningPython/2code' + +这是当前目录,在这个目录下再建一个新的子目录: + + >>> os.makedirs("newrd") + >>> os.chdir("newrd") + >>> os.getcwd() + '/home/qw/Documents/VBS/StarterLearningPython/2code/newrd' + +建立了一个。下面把这个删除了。这个是空的。 + + >>> os.listdir(os.getcwd()) + [] + >>> newdir = os.getcwd() + >>> os.removedirs(newdir) + +按照我的理解,这里应该报错。因为我是在当前工作目录删除当前工作目录。如果这样能够执行,总觉得有点别扭。但事实上,就行得通了。就算是python的规定吧。不过,让我来确定这个功能的话,还是习惯不能在本地删除本地。 + +按照上面的操作,在看当前工作目录: + + >>> os.getcwd() + Traceback (most recent call last): + File "", line 1, in + OSError: [Errno 2] No such file or directory + +目录被删了,当然没有啦。只能回到父级。 + + >>> os.chdir(os.pardir) + >>> os.getcwd() + '/home/qw/Documents/VBS/StarterLearningPython/2code' + +有点不可思议。本来没有当前工作目录,怎么会有“父级”的呢?但python就是这样。 + +补充一点,前面说的如果目录不空,就不能用`os.removedirs()`删除。但是,可以用模块shutil的retree方法。 + + >>> os.getcwd() + '/home/qw/Documents/VBS/StarterLearningPython/2code' + >>> os.chdir("rd") + >>> now = os.getcwd() + >>> now + '/home/qw/Documents/VBS/StarterLearningPython/2code/rd' + >>> os.listdir(now) + ['b.py', 'c.py'] + >>> import shutil + >>> shutil.rmtree(now) + >>> os.getcwd() + Traceback (most recent call last): + File "", line 1, in + OSError: [Errno 2] No such file or directory + +请读者注意的是,对于os.makedirs()还有这样的特点: + + >>> os.getcwd() + '/home/qw/Documents/VBS/StarterLearningPython/2code' + >>> d0 = os.getcwd() + >>> d1 = d0+"/ndir1/ndir2/ndir3" #这是想建立的目录,但是中间的ndir1,ndir2也都不存在。 + >>> d1 + '/home/qw/Documents/VBS/StarterLearningPython/2code/ndir1/ndir2/ndir3' + >>> os.makedirs(d1) + >>> os.chdir(d1) + >>> os.getcwd() + '/home/qw/Documents/VBS/StarterLearningPython/2code/ndir1/ndir2/ndir3' + +中间不存在的目录也被建立起来,直到做右边的目录为止。与os.makedirs()类似的还有os.mkdir(),不过,`os.mkdir()`没有上面这个功能,它只能一层一层地建目录。 + +`os.removedirs()`和`os.rmdir()`也类似,区别也类似上面。 + +###文件和目录属性 + +不管是在什么操作系统,都能看到文件或者目录的有关属性,那么,在os模块中,也有这样的一个方法:`os.stat()` + + >>> p = os.getcwd() #当前目录 + >>> p + '/home/qw/Documents/VBS/StarterLearningPython' + + #这个目录的有关信息 + >>> os.stat(p) + posix.stat_result(st_mode=16895, st_ino=4L, st_dev=26L, st_nlink=1, st_uid=0, st_gid=0, st_size=12288L, st_atime=1430224935, st_mtime=1430224935, st_ctime=1430224935) + + #指定一个文件 + >>> pf = p + "/README.md" + #此文件的信息 + >>> os.stat(pf) + posix.stat_result(st_mode=33279, st_ino=67L, st_dev=26L, st_nlink=1, st_uid=0, st_gid=0, st_size=50L, st_atime=1429580969, st_mtime=1429580969, st_ctime=1429580969) + +从结果中看,可能看不出什么来,先不用着急。这样的结果是对computer姑娘友好的,对读者可能不友好。如果用下面的方法,就友好多了: + + >>> fi = os.stat(pf) + >>> mt = fi[8] + +fi[8]就是st_mtime的值,它代表最后modified(修改)文件的时间。看结果: + + >>> mt + 1429580969 + +还是不友好。下面就用time模块来友好一下: + + >>> import time + >>> time.ctime(mt) + 'Tue Apr 21 09:49:29 2015' + +现在就对读者友好了。 + +用`os.stat()`能够查看文件或者目录的属性。如果要修改呢?比如在部署网站的时候,常常要修改目录或者文件的权限等。这种操作在python的os模块能做到吗? + +要求越来越多了。在一般情况下,不在python里做这个呀。当然,世界是复杂的。肯定有人会用到的,所以os模块提供了`os.chmod()` + +###操作命令 + +读者如果使用某种linux系统,或者曾经用过dos(恐怕很少),或者再windows里面用过command,对敲命令都不陌生。通过命令来做事情的确是很酷的。比如,我是在ubuntu中,要查看文件和目录,只需要`ls`就足够了。我并不是否认图形界面,而是在某些情况下,还是离不开命令的,比如用程序来完成查看文件和目录的操作。所以,os模块中提供了这样的方法,许可程序员在python程序中使用操作系统的命令。(以下是在ubuntu系统,如果读者是windows,可以将命令换成DOS命令。) + + >>> p + '/home/qw/Documents/VBS/StarterLearningPython' + >>> command = "ls " + p + >>> command + 'ls /home/qw/Documents/VBS/StarterLearningPython' + +为了输入方便,我采用了前面例子中已经有的那个目录,并且,用拼接字符串的方式,将要输入的命令(查看某文件夹下的内容)组装成一个字符串,赋值给变量command,然后: + + >>> os.system(command) + 01.md 101.md 105.md 109.md 113.md 117.md 121.md 125.md 129.md 201.md 205.md 209.md 213.md 217.md 221.md index.md + 02.md 102.md 106.md 110.md 114.md 118.md 122.md 126.md 130.md 202.md 206.md 210.md 214.md 218.md 222.md n001.md + 03.md 103.md 107.md 111.md 115.md 119.md 123.md 127.md 1code 203.md 207.md 211.md 215.md 219.md 2code README.md + 0images 104.md 108.md 112.md 116.md 120.md 124.md 128.md 1images 204.md 208.md 212.md 216.md 220.md 2images + 0 + +这样就列出来了该目录下的所有内容。 + +需要注意的是,`os.system()`是在当前进程中执行命令,直到它执行结束。如果需要一个新的进程,可以使用`os.exec`或者`os.execvp`。对此有兴趣详细了解的读者,可以查看帮助文档了解。另外,`os.system()`是通过shell执行命令,执行结束后将控制权返回到原来的进程,但是`os.exec()`及相关的函数,则在执行后不将控制权返回到原继承,从而使python失去控制。 + +关于python对进程的管理,此处暂不过多介绍。 + +`os.system()`是一个用途不少的函数。曾有一个朋友网上询问,用它来启动浏览器。不过,这个操作的确要非常仔细。为什么呢?演示一下就明白了。 + + >>> os.system("/usr/bin/firefox") + + (process:4002): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed + + (firefox:4002): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::sm-connect after class was initialised + ...... + +我是在ubuntu上操作的,浏览器的地址是`/usr/bin/firefox`,可是,那个朋友是windows,他就要非常小心了,因为在windows里面,表示路径的斜杠是跟上面显示的是反着的,可是在python中`\`这种斜杠代表转义。解决这个问题可以参看[《字符串(1)》](./106)。比较简单的一个方法用`r"c:\user\firfox.exe"`的样式,因为在`r" "`中的,都是被认为原始字符了。还没完,因为windows系统中,一般情况下那个文件不是安装在我演示的那个简单样式的文件夹中,而是`C:\Program Files`,这中间还有空格,所以还要注意,空格问题。简直有点晕头转向了。读者按照这些提示,看看能不能完成用`os.system()`启动firefox的操作呢? + +凡事感觉麻烦的东西,必然有另外简单的来替代。于是又有了一个webbrowser模块。可以专门用来打开指定网页。 + + >>> import webbrowser + >>> webbrowser.open("http://www.itdiffer.com") + True + +不管是什么操作系统,只要如上操作就能打开网页了。 + +真是神奇的标准库,有如此多的工具,能不加速开发进程吗?能不降低开发成本吗?“人生苦短,我用python”! + +------ + +[总目录](./index.md)   |   [上节:标准库(2)](./221.md)   |   [下节:标准库(4)](./223.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 diff --git a/2code/newtemp.py b/2code/newtemp.py new file mode 100644 index 0000000..1e99dab --- /dev/null +++ b/2code/newtemp.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python +# coding=utf-8 + +print "This is a tmp file." diff --git a/index.md b/index.md index a761e18..ddbd99a 100644 --- a/index.md +++ b/index.md @@ -82,7 +82,7 @@ 1. [编写模块](./219.md)==>模块是程序,模块的位置 2. [标准库(1)](./220.md)==>引用模块的方式,dir()查看属性和方法,模块文档和帮助 3. [标准库(2)](./221.md)==>sys,copy - +4. [标准库(3)](./222.md)==>os模块:操作文件、目录,查看修改属性,执行系统命令,打开网页 ##第柒章 保存数据 From 656b4dda14932a5e92e7b74807dcd56e71d3adbc Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 29 Apr 2015 11:27:09 +0800 Subject: [PATCH 020/417] modify --- 106.md | 4 ++-- 222.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/106.md b/106.md index e0d3b17..a1b4c99 100644 --- a/106.md +++ b/106.md @@ -82,9 +82,9 @@ 用双引号来包裹,双引号里面允许出现单引号。其实,反过来,单引号里面也可以包裹双引号。这个可以笼统地成为二者的嵌套。 -**解决方法二:**使用转移符 +**解决方法二:**使用转义符 -所谓转移,就是让某个符号不在表示某个含义,而是表示另外一个含义。转义符的作用就是它能够别的符号转义。在python中,用`\`作为转义符(其实很多语言,只要有转义符的,都是用这个符号)。 +所谓转义,就是让某个符号不在表示某个含义,而是表示另外一个含义。转义符的作用就是它能够别的符号转义。在python中,用`\`作为转义符(其实很多语言,只要有转义符的,都是用这个符号)。 >>> 'What\'s your name?' "What's your name?" diff --git a/222.md b/222.md index 524c93b..4e531cb 100644 --- a/222.md +++ b/222.md @@ -292,7 +292,7 @@ fi[8]就是st_mtime的值,它代表最后modified(修改)文件的时间 (firefox:4002): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::sm-connect after class was initialised ...... -我是在ubuntu上操作的,浏览器的地址是`/usr/bin/firefox`,可是,那个朋友是windows,他就要非常小心了,因为在windows里面,表示路径的斜杠是跟上面显示的是反着的,可是在python中`\`这种斜杠代表转义。解决这个问题可以参看[《字符串(1)》](./106)。比较简单的一个方法用`r"c:\user\firfox.exe"`的样式,因为在`r" "`中的,都是被认为原始字符了。还没完,因为windows系统中,一般情况下那个文件不是安装在我演示的那个简单样式的文件夹中,而是`C:\Program Files`,这中间还有空格,所以还要注意,空格问题。简直有点晕头转向了。读者按照这些提示,看看能不能完成用`os.system()`启动firefox的操作呢? +我是在ubuntu上操作的,浏览器的地址是`/usr/bin/firefox`,可是,那个朋友是windows,他就要非常小心了,因为在windows里面,表示路径的斜杠是跟上面显示的是反着的,可是在python中`\`这种斜杠代表转义。解决这个问题可以参看[《字符串(1)》](./106)的转义符以及[《字符串(2)》](./107)的原始字符串讲述。比较简单的一个方法用`r"c:\user\firfox.exe"`的样式,因为在`r" "`中的,都是被认为原始字符了。还没完,因为windows系统中,一般情况下那个文件不是安装在我演示的那个简单样式的文件夹中,而是`C:\Program Files`,这中间还有空格,所以还要注意,空格问题。简直有点晕头转向了。读者按照这些提示,看看能不能完成用`os.system()`启动firefox的操作呢? 凡事感觉麻烦的东西,必然有另外简单的来替代。于是又有了一个webbrowser模块。可以专门用来打开指定网页。 From ed8cc3bc2a09885ad5d40a1c16772266e1291ba7 Mon Sep 17 00:00:00 2001 From: codexc Date: Thu, 30 Apr 2015 10:45:13 +0800 Subject: [PATCH 021/417] Update 111.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更正错误的函数名 --- 111.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/111.md b/111.md index dbfc476..bc86ae1 100644 --- a/111.md +++ b/111.md @@ -212,7 +212,7 @@ list和str两种类型的数据,有共同的地方,它们都属于序列( >>> min(lst) 'c++' -- comp() +- cmp() 采用上面的方法,进行比较 From 5ca96bd66d183466855ec46cb343d6fc93d41abe Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 1 May 2015 23:24:28 +0800 Subject: [PATCH 022/417] lib3 --- 222.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/222.md b/222.md index 4e531cb..5b6c7f9 100644 --- a/222.md +++ b/222.md @@ -1,4 +1,4 @@ ->你们要谨慎行事,不要像愚昧人,当像智慧人。要爱惜光阴,因为现今的世代邪恶。不要作糊涂人,要明白主的旨意如何。不要醉酒,酒能使人放荡,乃要被圣灵充满。(EPHESIANS 4:15-18) +>你们要谨慎行事,不要像愚昧人,当像智慧人。要爱惜光阴,因为现今的世代邪恶。不要作糊涂人,要明白主的旨意如何。不要醉酒,酒能使人放荡,乃要被圣灵充满。(EPHESIANS 5:15-18) #标准库(3) From c39065d370401c3618dea9f9dea5421d0519ef05 Mon Sep 17 00:00:00 2001 From: codexc Date: Mon, 4 May 2015 14:55:55 +0800 Subject: [PATCH 023/417] Update 117.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改错别字 --- 117.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/117.md b/117.md index a077f29..5dd199a 100644 --- a/117.md +++ b/117.md @@ -8,7 +8,7 @@ ###copy -拷贝,这个汉语是copy的音译,标准的汉语翻译是“复制”。我还记得当初在学DOS的时候,那个老师说“拷贝”,搞得我晕头转向,他没有说引文的“copy”发音,而是用标准汉语说“kao(三声)bei(四声)”,对于一直学习过英语、标准汉语和我家乡方言的人来说,理解“拷贝”是有点困难的。谁知道在编程界用的是音译呢。 +拷贝,这个汉语是copy的音译,标准的汉语翻译是“复制”。我还记得当初在学DOS的时候,那个老师说“拷贝”,搞得我晕头转向,他没有说英文的“copy”发音,而是用标准汉语说“kao(三声)bei(四声)”,对于一直学习过英语、标准汉语和我家乡方言的人来说,理解“拷贝”是有点困难的。谁知道在编程界用的是音译呢。 在一般的理解中,copy就是将原来的东西再搞一份。但是,在python里面(乃至于很多编程语言中),copy可不是那么简单的。 @@ -437,4 +437,4 @@ get的含义是: [总目录](./index.md)   |   [上节:字典(1)](./116.md)   |   [下节:集合(1)](./118.md) -如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 From 0b71ae90c0dda9539f53d57e129d302d0172f934 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 4 May 2015 16:41:26 +0800 Subject: [PATCH 024/417] heapq deque --- 223.md | 241 ++++++++++++++++++++++++++++++++++++++++++++++ 2images/22301.jpg | Bin 0 -> 23860 bytes 2images/22302.jpg | Bin 0 -> 23977 bytes 2images/22303.jpg | Bin 0 -> 4377 bytes 2images/22304.jpg | Bin 0 -> 4571 bytes 2images/22305.jpg | Bin 0 -> 18966 bytes 2images/22306.jpg | Bin 0 -> 9257 bytes 2images/22307.jpg | Bin 0 -> 27298 bytes 2images/22308.jpg | Bin 0 -> 11318 bytes 2images/22309.jpg | Bin 0 -> 5946 bytes 2images/22310.jpg | Bin 0 -> 7681 bytes 2images/22311.jpg | Bin 0 -> 21992 bytes index.md | 1 + 13 files changed, 242 insertions(+) create mode 100644 223.md create mode 100644 2images/22301.jpg create mode 100644 2images/22302.jpg create mode 100644 2images/22303.jpg create mode 100644 2images/22304.jpg create mode 100644 2images/22305.jpg create mode 100644 2images/22306.jpg create mode 100644 2images/22307.jpg create mode 100644 2images/22308.jpg create mode 100644 2images/22309.jpg create mode 100644 2images/22310.jpg create mode 100644 2images/22311.jpg diff --git a/223.md b/223.md new file mode 100644 index 0000000..636b1c2 --- /dev/null +++ b/223.md @@ -0,0 +1,241 @@ +>凡事不可结党,不可贪图虚浮的荣耀,只要存心谦卑,各人看别人比自己强。各人不要单顾自己的事,也要顾别人的事。(PHILIPPIANS 2:3-4) + +#标准库(4) + +##heapq + +堆(heap),是一种数据结构。用维基百科中的说明: + +>堆(英语:heap),是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。 + +对于这个新的概念,读者不要感觉心慌意乱或者恐惧,因为它本质上不是新东西,而是在我们已经熟知的知识基础上的扩展。 + +堆的实现是通过构造二叉堆,也就是一种二叉树。 + +###基本知识 + +这是一颗在苏州很常见的香樟树,马路两边、公园里随处可见。 + +![](./22301.jpg) + +但是,在编程中,我们常说的树通常不是上图那样的,而是这样的: + +![](./22302.jpg) + +跟真实现实生活中看到的树反过来,也就是“根”在上面。为什么这样呢?我想主要是画着更方便吧。但是,我觉这棵树,是完全写实的作品。我本人做为一名隐姓埋名多年的抽象派画家,不喜欢这样的树,我画出来的是这样的: + +![](./22303.jpg) + +这棵树有两根枝杈,可不要小看这两根枝杈哦,《道德经》上不是说“一生二,二生三,三生万物”。一就是下面那个干,二就是两个枝杈,每个枝杈还可以看做下一个一,然后再有两个枝杈,如此不断重复(这简直就是递归呀),就成为了一棵大树。 + +我的确很佩服我自己的后现代抽象派的作品。但是,我更喜欢把这棵树画成这样: + +![](./22304.jpg) + +并且给它一个正规的名字:二叉树 + +![](./22305.jpg) + +这个也是二叉树,完全脱胎于我所画的后现代抽象主义作品。但是略有不同,这幅图在各个枝杈上显示的是数字。这种类型的“树”就编程语言中所说的二叉树,维基百科曰: + +在计算机科学中,二叉樹(英语:Binary tree)是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。 + +在上图的二叉树中,最顶端的那个数字就相当于树根,也就称作“根”。每个数字所在位置成为一个节点,每个节点向下分散出两个“子节点”。就上图的二叉树,在最后一层,并不是所有节点都有两个子节点,这类二叉树又称为完全二叉树(Complete Binary Tree),也有的二叉树,所有的节点都有两个子节点,这类二叉树称作满二叉树(Full Binarry Tree),如下图: + +![](./22306.jpg) + +下面讨论的对象是实现二叉堆就是通过二叉树实现的。其应该具有如下特点: + +- 节点的值大于等于(或者小于等于)任何子节点的值。 +- 节点左子树和右子树是一个二叉堆。如果父节点的值总大于等于任何一个子节点的值,其为最大堆;若父节点值总小于等于子节点值,为最小堆。上面图示中的完全二叉树,就表示一个最小堆。 + +堆的类型还有别的,如斐波那契堆等,但很少用。所以,通常就将二叉堆也说成堆。下面所说的堆,就是二叉堆。而二叉堆又是用二叉树实现的。 + +###堆的存储 + +堆用列表(有的语言中成为数组)来表示。如下图所示: + +![](./22307.jpg) + +从图示中可以看出,将逻辑结构中的树的节点数字依次填入到存储结构中。看这个图,似乎是列表中按照顺序进行排列似的。但是,这仅仅由于那个树的特点造成的,如果是下面的树: + +![](./22308.jpg) + +如果将上面的逻辑结构转换为存储结构,读者就能看出来了,不再是按照顺序排列的了。 + +关于堆的各种,如插入、删除、排序等,本节不会专门讲授编码方法,读者可以参与有关资料。但是,下面要介绍如何用python中的模块heapq来实现这些操作。 + +###heapq模块 + +heapq中的heap是堆,q就是queue(队列)的缩写。此模块包括: + + >>> import heapq + >>> heapq.__all__ + ['heappush', 'heappop', 'heapify', 'heapreplace', 'merge', 'nlargest', 'nsmallest', 'heappushpop'] + +依次查看这些函数的使用方法。 + +**heappush(heap, x)**:将x压入对heap(这是一个列表) + + Help on built-in function heappush in module _heapq: + + heappush(...) + heappush(heap, item) -> None. Push item onto heap, maintaining the heap invariant. + + + >>> import heapq + >>> heap = [] + >>> heapq.heappush(heap, 3) + >>> heapq.heappush(heap, 9) + >>> heapq.heappush(heap, 2) + >>> heapq.heappush(heap, 4) + >>> heapq.heappush(heap, 0) + >>> heapq.heappush(heap, 8) + >>> heap + [0, 2, 3, 9, 4, 8] + +请读者注意我上面的操作,在向堆增加数值的时候,我并没有严格按照什么顺序,是随意的。但是,当我查看堆的数据时,显示给我的是一个有一定顺序的数据结构。这种顺序不是按照从小到大,而是按照前面所说的完全二叉树的方式排列。显示的是存储结构,可以把它还原为逻辑结构,看看是不是一颗二叉树。 + +![](./22309.jpg) + +由此可知,利用`heappush()`函数将数据放到堆里面之后,会自动按照二叉树的结构进行存储。 + +**heappop(heap)**:删除最小元素 + +承接上面的操作: + + >>> heapq.heappop(heap) + 0 + >>> heap + [2, 4, 3, 9, 8] + +用`heappop()`函数,从heap堆中删除了一个最小元素,并且返回该值。但是,这时候的heap显示顺序,并非简单地将0去除,而是按照完全二叉树的规范重新进行排列。 + +**heapify()**:将列表转换为堆 + +如果已经建立了一个列表,利用`heapify()`可以将列表直接转化为堆。 + + >>> hl = [2, 4, 6, 8, 9, 0, 1, 5, 3] + >>> heapq.heapify(hl) + >>> hl + [0, 3, 1, 4, 9, 6, 2, 5, 8] + +经过这样的操作,列表hl就变成了堆(注意观察堆的顺序,和列表不同),可以对hl(堆)使用heappop()或者heappush()等函数了。否则,不可。 + + >>> heapq.heappop(hl) + 0 + >>> heapq.heappop(hl) + 1 + >>> hl + [2, 3, 5, 4, 9, 6, 8] + >>> heapq.heappush(hl, 9) + >>> hl + [2, 3, 5, 4, 9, 6, 8, 9] + +不要认为堆里面只能放数字,之所以用数字,是因为对它的逻辑结构比较好理解。 + + >>> heapq.heappush(hl, "q") + >>> hl + [2, 3, 5, 4, 9, 6, 8, 9, 'q'] + >>> heapq.heappush(hl, "w") + >>> hl + [2, 3, 5, 4, 9, 6, 8, 9, 'q', 'w'] + +**heapreplace()** + +是heappop()和heappush()的联合,也就是删除一个,同时加入一个。例如: + + >>> heap + [2, 4, 3, 9, 8] + >>> heapq.heapreplace(heap, 3.14) + 2 + >>> heap + [3, 4, 3.14, 9, 8] + +先简单罗列关于对的几个常用函数。那么堆在编程实践中的用途在哪方面呢?主要在排序上。一提到排序,读者肯定想到的是sorted()或者列表中的sort(),不错,这两个都是常用的函数,而且在一般情况下已经足够使用了。如果再使用堆排序,相对上述方法应该有优势。 + +堆排序的优势不仅更快,更重要的是有效地使用内存,当然,另外一个也不同忽视,就是简单易用。比如前面操作的,删除数列中最小的值,就是在排序基础上进行的操作。 + +##deque模块 + +有这样一个问题:一个列表,比如是`[1,2,3]`,我打算在最右边增加一个数字。 + +这也太简单了,不就是用`append()`这个内建函数,追加一个吗? + +这是简单,我要得寸进尺,能不能在最左边增加一个数字呢? + +这个嘛,应该有办法。不过得想想了。读者在向下阅读的时候,能不能想出一个方法来? + + >>> lst = [1, 2, 3] + >>> lst.append(4) + >>> lst + [1, 2, 3, 4] + >>> nl = [7] + >>> nl.extend(lst) + >>> nl + [7, 1, 2, 3, 4] + +你或许还有别的方法。但是,python为我们提供了一个更简单的模块,来解决这个问题。 + + >>> from collections import deque + +这次用这种引用方法,因为collections模块中东西很多,我们只用到deque。 + + >>> lst + [1, 2, 3, 4] + +还是这个列表。试试分别从右边和左边增加数 + + >>> qlst = deque(lst) + +这是必须的,将列表转化为deque。deque在汉语中有一个名字,叫做“双端队列”(double-ended queue)。 + + >>> qlst.append(5) #从右边增加 + >>> qlst + deque([1, 2, 3, 4, 5]) + >>> qlst.appendleft(7) #从左边增加 + >>> qlst + deque([7, 1, 2, 3, 4, 5]) + +这样操作多么容易呀。继续看删除: + + >>> qlst.pop() + 5 + >>> qlst + deque([7, 1, 2, 3, 4]) + >>> qlst.popleft() + 7 + >>> qlst + deque([1, 2, 3, 4]) + +删除也分左右。下面这个,请读者仔细观察,更有点意思。 + + >>> qlst.rotate(3) + >>> qlst + deque([2, 3, 4, 1]) + +rotate()的功能是将[1, 2, 3, 4]的首位连起来,你就想象一个圆环,在上面有1,2,3,4几个数字。如果一开始正对着你的是1,依顺时针方向排列,就是从1开始的数列,如下图所示: + +![](./22310.jpg) + +经过`rotate()`,这个环就发生旋转了,如果是`rotate(3)`,表示每个数字按照顺时针方向前进三个位置,于是变成了: + +![](./22311.jpg) + +请原谅我的后现代注意超级抽象派作图方式。从图中可以看出,数列变成了[2, 3, 4, 1]。rotate()作用就好像在拨转这个圆环。 + + >>> qlst + deque([3, 4, 1, 2]) + >>> qlst.rotate(-1) + >>> qlst + deque([4, 1, 2, 3]) + +如果参数是复数,那么就逆时针转。 + +在deque中,还有extend和extendleft方法。读者可自己调试。 + +------ + +[总目录](./index.md)   |   [上节:标准库(3)](./222.md)   |   [下节:标准库(5)](./224.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2images/22301.jpg b/2images/22301.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffb616f60eeada60143d3c5adde2ee80bd81a60f GIT binary patch literal 23860 zcmbTdbyOTd_vbwXcXtR$aCf%=!2<+$_nF|XNgzOi>kvG+4ucQwuEAlD!QI`nd3N9T zw`cdS-L0-V)#p@opZauHci;QH)qfZMt^o*C6qFSJNJvNki+>y7?>c}--q+C%08mo{ zumJ!7jDKysfLH(a@ctF5e+A&<*(plW$oew_`3v<10cV8^`HDNq5R9J7^tWy zD5zNI=x7)?SU5P?SlHOOctixac!YS^*aTz*gv2DIq@+0b

Bi6htJXB>y=H67s)e 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 oQQ^mPrJSx7zV{6aKmH>dFB7g}1 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 literal 0 HcmV?d00001 diff --git a/2images/22303.jpg b/2images/22303.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8f3efa7fd69298c5b9d5aa7e8f5af53857ad3f35 GIT binary patch literal 4377 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 N_P4nFe>RNw{{WBE{&)ZY literal 0 HcmV?d00001 diff --git a/2images/22305.jpg b/2images/22305.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a18118813adaa6123433784e1c60312114640de7 GIT binary patch literal 18966 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 P1Ly#t0)PqtCR`c$cv7wuy*}i;9Sdi3kge z?GY0b-wick(LW^i?EYi>eET8W-M4!|$8Hf}k?lMF-x|LakQ4!)1NDLe%D@gu0YOOt zekY&=00Kggx7!Z?dlT3pxKn5s

;bVL1K$bCV<9gwp^J9k2N$3Wi$J0*qo9XWY^ zm(-Q(!pb4idJobIL{u(Rx5-=`WT@)jxcg94Ojd6H0eLm`qZ-GK8yKE4I(^32{Gx@W zm9@ zE&)LBf5Z9@Wd8-1B!p`RGzU9{w{Z#Vh=5E`a;MOdle_kvzao4+L`qrjfr#{l^n&U( zQ5F5G44E5u2gPJn4XA3&ZD{|7?0*LA;r|!1{{Z$cTohoppa3*^f|39X;BpF+HGuzY zKluQ~e6Eb6f!X0UHG#k|(j#%5?)b7ql2M`dz{HI6$n9d0Z2e-kT>zWGz{eQt5+ z`Nk);&fhVT$S5dedLk92z2ueJ6CR@SwX!cHh zgR};N2$S>eMN+NmY4PM5!~B%FW+g?`g)tZvfwCJ$b(A70rP;_}iMX+V2_5Y^kAPwB zj%m1_lOIBzl%pc;ViaM!)8womExR2f#tC7lZN`(3RGb9Z(IH=!&6-m27%mvm(&4<7 zb>)0ecTQn_cszIK^v$bhfX~9`Eh2ZlIJ>xNK1UXhyuawe6n@+y4K6y_N!hoIZ$#r= zt}?vv26s(QURyTGu+i?vMH}1@abNIjOyDh3DEg*GPc6#WTtNDY#eZuuvxJVWdpCNBwssGI*^@4T@##K#nR??r|7lhbQXvD9MmU_im5KQR~P5QD(63%eDOn z@?FniLsT+TiY*Sur@!C7wVujB_%l}8wo>1go4>y1hPY$cIk)ZE^wDh_TrZ*XD0)ISA{%ua}riU@5sN=~bctPN_6f?0qO%SwS zUp-2LKdM8D`_)G(x)SKRmGT>YBLuC^D|MUl+O@^w`@T{ve1y7kCyCejfQ0Zc$%&UX z>mA1j>V#7_Lb>0@lo$j8>FBrC(}jluk`=SV`r&f%=|1!;J)D*E|Ue( z0?2WmG;w&tJ4qg2^8Ur_*+1xtPEcGbQv7Rbe+;Hm^q4QyW4=F~>mLuRu44v0PEG&Z$SdPeD`HcTH*EH#vs_^=Qw)>)MQ+3Yw$?4NI zwozt%$R-mvLz^%q3sYu+ zh2F;3kGlHr6ih#NNJ#q1x&PK8F<4W#SG>{b<0G6yvvjz_AWEQcs<$k%xr-9kG3goT zB6%h?M$S4|9Fm}T<1I5gVU&iu2PEJyoui#WKiy92FI%^Mgp z-~%VqDUMVz=2Gdfii)ww`05 zF+SAwG+lCCi#kV}t(Z*+^xIE&>`J!@%OfT3bAsh_iAUP1%k+l`G`6Oe|U_jJ$rs!Q&1x(Di;1;k7gy>>@-=Spdoc#C}3PZo?H4L;K(zF5l^*|Fl>U_ zn(n%q#d*W|PwU#9KZAC;m1bG~{^zssb4*9G=^2^?L~|%B?n_e-nkad0#hDMpmsLeZ z&?Bj^&!M*1J;sO1C1Hbf<(b;(^~~b*-+Un1Td>6h^#?=km$xWS1$@*^iJ8d`+=65M zh8M;-`emxgZgrZA^;e?G#jhAh>bz5Hx4Xl7_SNfn+r2~UMv%H4X2QB)6VIsj%}keb z;9z+h-YqcP87<4$0b*>8<&w&B)=tk3%}WI9lo^h;hNpdMAYp}(mB%GBTiW7Z(5@~^ zeh~WmAl>Z6`o);<_o66Mb?{*VrtNiwiEZ{4o$HOxHMs+;S>znXF$zO0E8GC_gz}}VvU~MbKzJNwZkq`UY6rM)KpPfaf?TrkiZQ2D(zV8iDb!K$Syn9#Q8F97m zc185AJb{0(9mt3RJ|IS5Jp_B$>(U%JL`Q90Gx&6OG3xYC!I+`P8JBOO>a~@VJwai? z%4?bF21vIn6jdp`PWl~8n=y>Gz!4>aeHECp$VYSG>oVuduicAMO03e+(LupVKM40o zeEHRz8yb1!lk(EK-ySWZ)HS;mJ|I&yKg^R~$=(a5cDL`Me6+z`BPE|XJmlk~t=1uW zz~}c~eLwSRYoSLP$NlckW1oHh)92HOi{l3vHJzuiq_lKDf(~as+;pht((x_tsOutA z2$y{XjqDKj?<}I8M=hXgt%IMxskJZQd6G0ANQeW|*hZKh#Ag)j6=)`rvjT}rhuf0- zWlyg;=b@^yj758*WyWa^J37Vka5_9JbPFXC4vhr^PEKu62XV}wG@Y~(&ecZnHv?%i zY%rN8N88OnSfTNn_Qafhr#aSREq87d@_nn-qPpmoy{d58isV&c$>@I0r73 zUWf<^=L4F&hM2tJ(G!IvL6$Y7xG?4C+wMz|2^I8{RpMr33-#6g3T?>MTuB5^#*Q&!MX%Wjv0DC zK0AK3>U|1hr8E5tT<6J_N59W-s7G_ArL98m#b`TYm1vzXDV9|-Vy#L?8y{=>fq2gjuXl)HqeconFx0YM;~U&C2=eks*h3nV z&2ZL=>KL;pDwN^Yy6GUg7Vj2#V78*k=nEf+*p6?i z6CYp^^SUW8s_N)!OUE}K6A~G;2vaga_qBvo4d|otUC86vypJD^s?Rmu3+Q{NS}Kn%0i8veBnITzsFet&uGH-$FmJgmK@wRY;%_n~QR#qpCQ z-!lLBzIL>^eg6VxmB~I0@`5Ss&KU(W5uOv;bo=sQ@O z4*6q!rO)+ELprr%eAw9t&yinTxr>8AYUB|^aduoo{TpJE zc&|atThW67$)EZ=g@BB6GCze|(@i?QKuENxG0P!@> zeQOejIHnEt!`%ra%QqyN=c17aszcSiPBOGRyHyf^&OI{0Tijm?Ox&G37V z@$}n=N6zwMO$B*}QW#i!ZvO)WQ?NDX0;c>kNs6h`nJ@LZ@?LKY&Td$jzDnP0SW@~J zZ}j1Z^<>^uniBgAN`Mi(D$EXweBH4noLI*_dXf8*et7&=*jwqo^63?dZ_VWN(q{G# z+^Gc{`p)|)P1c)o`j=bOnzAn6MH2|RT!NWcAX&j|4_q$3%76=_$tCDenMWUPh>u4G zt#0IA@R~ZBWr)b=pN-0jxN*=%J9GZqk;I$;!4Zur*sR3+cbY8h_F6{%``A`|d?`6V z{TY1Zit$S7>V`(7~K_*|9(=U~TsOOcnVai_}P}VT?o3Eg9NIbzQZWWml00is2lz@8IjNKysux{=VO(s(Vcrwl@;3;gnXy+>}vH; zzGIF2rkI8xtR1a2M2e<*>U(~!KMQjoG<a+DVsRvQa3~)T}u2 zVCTL)0WPuVJ_y?roPw^|PMe>RH|8!iGZQ-|auXBn&>mX`(jM$ZT4`G__{ng9d)cO75rKXTlJTnW4MSh?M>F7X9uFH^I6=q==_I%($ zM2l)Y13%CyA#LGv@6{w2KFz%)`ljy7cy?|7Rk*rHmi2H%)_iHcNb9HE>wcw`NjHSkFpzHD>fVNTAaxXEk7qvN2zBuTfJn44Yb8C5C8I%vZzb$fDf-~ z4^hV2r&UFzPhN~w4JkbSsxVd>O0k^d{XuwFj!PO!vlQ7RTUNH>u3nFj;o+cHL9GwZ zC6y~4E6fzNQ3>_+4O2aF_~CiH*tzXW6{@X*rwu^du7+4x4-!cJ| zmbc{{r3iVs$4*7qKZh^>G;sbL^VVzT3h{waU&vik^AMGoK~G_h=^|B*gW?is!WmZ^GO}P(C#00=) zzk(0xras&}+Ir&s3oFF2H=wRnv? ziL$u84yw<5eTIGs{xBC$_?Odhte@tR9szc9E%hr-Ju!;Dd@L zr#FK4e?OHI+K$xh3G&UMM6(T26|gq$HYdhX0Lm1~&M_SM(-eH|aKnWVgLSTd_XeR$e&G%Kl&C~vnKj+TOInYqx? z`z+HLQZes3rB*J|W2}nyX80Fd;t(Rj$Ypb1!z1)$_4}*KJX0w8A_RO(Ax^t;s$4JmG(v6X0y$$M@+k{0&Ws>L~o=Q z=1fQWI%SDJ_OnsW61}39;98t|(aO@{>VeNLv6wa!7!3!8F_qdQaBrEyaV^KeUbg%A zddxF6{95z)DmvtEjM3%MUn^QI%ojs3X46u#(rJ5KpcFCH zpnMe-~fw#+}^c04ORKN%*3_{{yH_q@e^B?P#Ab(Sym2xEk!#28l%>debdUk?jOAq zrVlk+O)=2$Lhe4{12>=|>*yv&4JWoR`d15cCixaMopctDIK?jYRBz{0)QzGiqNJUP z>E~J4u$nX{Vq=-36to;?Jz{EkLoA>3_w-6GA5fp?ymcbgO{kEer$?i- z$I-&*R{aCbbOb{XU9PqIlGOk+mz4A}S zE<32VzyRkcSW5++W^43pG=1}LjL&+i z*%1)Q2X<11T8?nSM#7NdX=2~y6NpvI_Zza+T8a%`TjpC=tpr;>* zP|^G6=Driir(@745Z@OSf5GipRy+ubWCxiw<*V1d8w$fc)_7`rVCdW6T2NtQ!w`k$ z>gA?$Gi5CSXIML7>l3xu_bVpo>b0S}Yd-b|-&|RRHqgW%`GRp|jA-7Iut5w}1$3h7 zuHsC-@kZFY2((~g)B!%=!3w5poAgiMH0i8n*6+c!%`GOh0qO#|e>9aN$+T*Nc1otT z!7vuvHt&#M>H*S~f*C8N$+||h7jb*PDq!tStsPVSqUd?bBs`y@P_byO1rp{~%>+OT zHUd2?#|I9fPk?h&J96^u&;}u~>@qWbryN}EFK?-!92mAmgPGQW*f@K_LqzxXx;DqAc-iGkgM&zhf~HAt z#h|oEVg1{?`%eEu7(xTvvV*b%-SFVJ6|*dHp3xmo+F0U8j zIcI7S9E=ni#p4%sBV_TY!JTyh{^Vmimr%JJ*l+Fe>EUbrTR#Y@c~*UfI^&!mFo5Db zwBAf64_ZizFeE0Fc`OFMH=BV~mwVzRRV%spLCP>C}t= z9y=VaMI6@w5XIW-wf$M2Nf~;@Ar*dpr^SR-pLwY;*ITF6L2qWZJ=n}(cid0JZg@1? zV)lUJ9Stt0(x<^kma*P_f3du8<%mbFYwNDN{n$M5o<)qHjzwjBu$bg%gMG6~6e5*X za*vAlwq)MMF7y^5PhHL}8D2xx>n~B_i(lFzLz9kIj%A-L9?YIp4ZM5YzwhJki0`K< zTdR@&94TKoU5KXpc&09X79mILFKh~qLw#_PA8)51dxes`@YokQ%fG%o!Ir<@HR$c^ zq`N25-;Uv(c*`J030^%Ens1GrOVoaRWkq9LaY&mHMY(!k$takT1*q7p1^voC zUguL|qq7x;4vsRz6Gt+`zm_zQ@_~#Wwie&g%~^`jDVA-?2mJZKhY~&@?u=QLsD;i= zc<1gLvC1aGdFwoL3{(ye_`wI}+4O1ub<(otFmESHdWh^lkPzOoe@Mqr{CmdQrX#6^ z92$+k%44k|Cs%q<_10N7YimbeWbB`d-(BL9dU{myQhHuIw8^CiW7_gW=?w9?wA6Ky zM0pb? zRR1na^8KT!BuB?c*ZikG~ORD3HAdo-U> z&alclrahlRODA>uVser-1fN35n;%N&EqA&oiutHh9);5$%O;?_nc>wXfmak2r`JBN zIA&0mr!79(>|~Oz7U>!5RXaizc5$>6=rSAeKntZkOV|x!+IahiI0MxPdG)+MaMuwF g)ZDN&(CaVaObG;@~J?hY}y@X22g8Yg91)DO8-~a#s literal 0 HcmV?d00001 diff --git a/2images/22307.jpg b/2images/22307.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd69f7895e331d7e48e53ee2996a86b23354947c GIT binary patch literal 27298 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[oq&xzP|lbs_doI9z}!X-|#|bp<2JS3Dvyj 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 literal 0 HcmV?d00001 diff --git a/2images/22308.jpg b/2images/22308.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09ae3262493e6ff1cde7388235add3b1c3cee185 GIT binary patch literal 11318 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 literal 0 HcmV?d00001 diff --git a/2images/22309.jpg b/2images/22309.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3e6f175f629da6fc6f155f618195e2b3c808305 GIT binary patch literal 5946 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 literal 0 HcmV?d00001 diff --git a/index.md b/index.md index ddbd99a..d810b03 100644 --- a/index.md +++ b/index.md @@ -83,6 +83,7 @@ 2. [标准库(1)](./220.md)==>引用模块的方式,dir()查看属性和方法,模块文档和帮助 3. [标准库(2)](./221.md)==>sys,copy 4. [标准库(3)](./222.md)==>os模块:操作文件、目录,查看修改属性,执行系统命令,打开网页 +5. [标准库(4)](./223.md)==>堆的基本知识,heapq模块,deque模块 ##第柒章 保存数据 From 49f17b186a9f4e5bc1d5bfc42431bfd993422614 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 4 May 2015 16:45:08 +0800 Subject: [PATCH 025/417] heapq deque --- 223.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/223.md b/223.md index 636b1c2..80169b6 100644 --- a/223.md +++ b/223.md @@ -16,25 +16,25 @@ 这是一颗在苏州很常见的香樟树,马路两边、公园里随处可见。 -![](./22301.jpg) +![](./2images/22301.jpg) 但是,在编程中,我们常说的树通常不是上图那样的,而是这样的: -![](./22302.jpg) +![](./2images/22302.jpg) 跟真实现实生活中看到的树反过来,也就是“根”在上面。为什么这样呢?我想主要是画着更方便吧。但是,我觉这棵树,是完全写实的作品。我本人做为一名隐姓埋名多年的抽象派画家,不喜欢这样的树,我画出来的是这样的: -![](./22303.jpg) +![](./2images/22303.jpg) 这棵树有两根枝杈,可不要小看这两根枝杈哦,《道德经》上不是说“一生二,二生三,三生万物”。一就是下面那个干,二就是两个枝杈,每个枝杈还可以看做下一个一,然后再有两个枝杈,如此不断重复(这简直就是递归呀),就成为了一棵大树。 我的确很佩服我自己的后现代抽象派的作品。但是,我更喜欢把这棵树画成这样: -![](./22304.jpg) +![](./2images/22304.jpg) 并且给它一个正规的名字:二叉树 -![](./22305.jpg) +![](./2images/22305.jpg) 这个也是二叉树,完全脱胎于我所画的后现代抽象主义作品。但是略有不同,这幅图在各个枝杈上显示的是数字。这种类型的“树”就编程语言中所说的二叉树,维基百科曰: @@ -42,7 +42,7 @@ 在上图的二叉树中,最顶端的那个数字就相当于树根,也就称作“根”。每个数字所在位置成为一个节点,每个节点向下分散出两个“子节点”。就上图的二叉树,在最后一层,并不是所有节点都有两个子节点,这类二叉树又称为完全二叉树(Complete Binary Tree),也有的二叉树,所有的节点都有两个子节点,这类二叉树称作满二叉树(Full Binarry Tree),如下图: -![](./22306.jpg) +![](./2images/22306.jpg) 下面讨论的对象是实现二叉堆就是通过二叉树实现的。其应该具有如下特点: @@ -55,11 +55,11 @@ 堆用列表(有的语言中成为数组)来表示。如下图所示: -![](./22307.jpg) +![](./2images/22307.jpg) 从图示中可以看出,将逻辑结构中的树的节点数字依次填入到存储结构中。看这个图,似乎是列表中按照顺序进行排列似的。但是,这仅仅由于那个树的特点造成的,如果是下面的树: -![](./22308.jpg) +![](./2images/22308.jpg) 如果将上面的逻辑结构转换为存储结构,读者就能看出来了,不再是按照顺序排列的了。 @@ -96,7 +96,7 @@ heapq中的heap是堆,q就是queue(队列)的缩写。此模块包括: 请读者注意我上面的操作,在向堆增加数值的时候,我并没有严格按照什么顺序,是随意的。但是,当我查看堆的数据时,显示给我的是一个有一定顺序的数据结构。这种顺序不是按照从小到大,而是按照前面所说的完全二叉树的方式排列。显示的是存储结构,可以把它还原为逻辑结构,看看是不是一颗二叉树。 -![](./22309.jpg) +![](./2images/22309.jpg) 由此可知,利用`heappush()`函数将数据放到堆里面之后,会自动按照二叉树的结构进行存储。 @@ -216,11 +216,11 @@ heapq中的heap是堆,q就是queue(队列)的缩写。此模块包括: rotate()的功能是将[1, 2, 3, 4]的首位连起来,你就想象一个圆环,在上面有1,2,3,4几个数字。如果一开始正对着你的是1,依顺时针方向排列,就是从1开始的数列,如下图所示: -![](./22310.jpg) +![](./2images/22310.jpg) 经过`rotate()`,这个环就发生旋转了,如果是`rotate(3)`,表示每个数字按照顺时针方向前进三个位置,于是变成了: -![](./22311.jpg) +![](./2images/22311.jpg) 请原谅我的后现代注意超级抽象派作图方式。从图中可以看出,数列变成了[2, 3, 4, 1]。rotate()作用就好像在拨转这个圆环。 From e783345193e3b9366c461bda965194338fa36273 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 4 May 2015 16:48:41 +0800 Subject: [PATCH 026/417] heapq deque --- 223.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/223.md b/223.md index 80169b6..584a21a 100644 --- a/223.md +++ b/223.md @@ -38,7 +38,7 @@ 这个也是二叉树,完全脱胎于我所画的后现代抽象主义作品。但是略有不同,这幅图在各个枝杈上显示的是数字。这种类型的“树”就编程语言中所说的二叉树,维基百科曰: -在计算机科学中,二叉樹(英语:Binary tree)是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。 +>在计算机科学中,二叉樹(英语:Binary tree)是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。 在上图的二叉树中,最顶端的那个数字就相当于树根,也就称作“根”。每个数字所在位置成为一个节点,每个节点向下分散出两个“子节点”。就上图的二叉树,在最后一层,并不是所有节点都有两个子节点,这类二叉树又称为完全二叉树(Complete Binary Tree),也有的二叉树,所有的节点都有两个子节点,这类二叉树称作满二叉树(Full Binarry Tree),如下图: From 5841225f399323ab72145a2a4643ad04dd5d65b8 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 5 May 2015 09:32:27 +0800 Subject: [PATCH 027/417] time datetime --- 224.md | 416 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.md | 1 + 2 files changed, 417 insertions(+) create mode 100644 224.md diff --git a/224.md b/224.md new file mode 100644 index 0000000..085a5df --- /dev/null +++ b/224.md @@ -0,0 +1,416 @@ +>凡所行的,都不要发怨言、起争论,使你们无可指摘,诚实无伪,在这弯曲悖谬的世代作神无瑕疵的儿女。你们显在这世代中,好像明光照耀,将生命的道表明出来。(PHILIPPIANS 2:14-15) + +#标准库(5) + +“一寸光阴一寸金,寸金难买寸光阴”,时间是宝贵的。 + +在日常生活中,“时间”这个属于是比较笼统和含糊的。在物理学中,“时间”是一个非常明确的概念。在python中,“时间”可以通过相关模块实现。 + +##calendar + + >>> import calendar + >>> cal = calendar.month(2015, 1) + >>> print cal + January 2015 + Mo Tu We Th Fr Sa Su + 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 + +轻而易举得到了2015年1月的日历,并且排列的还那么整齐。这就是calendar模块。读者可以用dir()去查看这个模块下的所有内容。为了让读者阅读方便,将常用的整理如下: + +**calendar(year,w=2,l=1,c=6)** + +返回year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。 + + >>> year = calendar.calendar(2015) + >>> print year + 2015 + + January February March + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 4 1 1 + 5 6 7 8 9 10 11 2 3 4 5 6 7 8 2 3 4 5 6 7 8 + 12 13 14 15 16 17 18 9 10 11 12 13 14 15 9 10 11 12 13 14 15 + 19 20 21 22 23 24 25 16 17 18 19 20 21 22 16 17 18 19 20 21 22 + 26 27 28 29 30 31 23 24 25 26 27 28 23 24 25 26 27 28 29 + 30 31 + + April May June + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 4 5 1 2 3 1 2 3 4 5 6 7 + 6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14 + 13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21 + 20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28 + 27 28 29 30 25 26 27 28 29 30 31 29 30 + + July August September + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 4 5 1 2 1 2 3 4 5 6 + 6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13 + 13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20 + 20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27 + 27 28 29 30 31 24 25 26 27 28 29 30 28 29 30 + 31 + + October November December + Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su + 1 2 3 4 1 1 2 3 4 5 6 + 5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13 + 12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20 + 19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27 + 26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31 + 30 + +**isleap(year)** + +判断是否为闰年,是则返回true,否则false. + + >>> calendar.isleap(2000) + True + >>> calendar.isleap(2015) + False + +怎么判断一年是闰年,常常见诸于一些编程语言的练习题,现在用一个方法搞定。 + +**leapdays(y1,y2)** + +返回在Y1,Y2两年之间的闰年总数,包括y1,但不包括y2,这有点如同序列的切片一样。 + + >>> calendar.leapdays(2000,2004) + 1 + >>> calendar.leapdays(2000,2003) + 1 + +**month(year,month,w=2,l=1)** + +返回year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。 + + >>> print calendar.month(2015, 5) + May 2015 + Mo Tu We Th Fr Sa Su + 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 + +**monthcalendar(year,month)** + +返回一个列表,列表内的元素还是列表,这叫做嵌套列表。每个子列表代表一个星期,都是从星期一到星期日,如果没有本月的日期,则为0。 + + >>> calendar.monthcalendar(2015, 5) + [[0, 0, 0, 0, 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]] + +读者可以将这个结果和`calendar.month(2015, 5)`去对照理解。 + +**monthrange(year,month)** + +返回一个元组,里面有两个整数。第一个整数代表着该月的第一天从星期几是(从0开始,依次为星期一、星期二,直到6代表星期日)。第二个整数是该月一共多少天。 + + >>> calendar.monthrange(2015, 5) + (4, 31) + +从返回值可知,2015年5月1日是星期五,这个月一共31天。这个结果,也可以从日历中看到。 + +**weekday(year,month,day)** + +输入年月日,知道该日是星期几(注意,返回值依然按照从0到6依次对应星期一到星期六)。 + + >>> calendar.weekday(2015, 5, 4) #星期一 + 0 + >>> calendar.weekday(2015, 6, 4) #星期四 + 3 + +##time + +**time()** + +time模块是常用的。 + + >>> import time + >>> time.time() + 1430745298.391026 + +`time.time()`获得的是当前时间(严格说是时间戳),只不过这个时间对人不友好,它是以1970年1月1日0时0分0秒为计时起点,到当前的时间长度(不考虑闰秒) + +>UNIX時間,或稱POSIX時間是UNIX或類UNIX系統使用的時間表示方式:從協調世界時1970年1月1日0時0分0秒起至現在的總秒數,不考慮閏秒 + +>現時大部分使用UNIX的系統都是32位元的,即它們會以32位二進制數字表示時間。但是它們最多只能表示至協調世界時間2038年1月19日3時14分07秒(二進制:01111111 11111111 11111111 11111111,0x7FFF:FFFF),在下一秒二進制數字會是10000000 00000000 00000000 00000000,(0x8000:0000),這是負數,因此各系統會把時間誤解作1901年12月13日20時45分52秒(亦有說回歸到1970年)。這時可能會令軟體發生問題,導致系統癱瘓。 + + +>目前的解決方案是把系統由32位元轉為64位元系統。在64位系統下,此時間最多可以表示到292,277,026,596年12月4日15時30分08秒。 + +有没有对人友好一点的时间显示呢? + +**localtime()** + + >>> time.localtime() + time.struct_time(tm_year=2015, tm_mon=5, tm_mday=4, tm_hour=21, tm_min=33, tm_sec=39, tm_wday=0, tm_yday=124, tm_isdst=0) + +这个就友好多了。得到的结果可以称之为时间元组(也有括号),其各项的含义是: + +|索引| 属性 |含义| +|----|----------|----| +|0 |tm_year| 年| +|1 |tm_mon| 月| +|2| tm_mday |日| +|3| tm_hour| 时| +|4| tm_min| 分| +|5| tm_sec| 秒| +|6| tm_wday| 一周中的第几天| +|7| tm_yday| 一年中的第几天| +|8| tm_isdst| 夏令时| + + >>> t = time.localtime() + >>> t[1] + 5 + +通过索引,能够得到相应的属性,上面的例子中就得到了当前时间的月份。 + +其实,`time.localtime()`不是没有参数,它在默认情况下,以`time.time()`的时间戳为参数。言外之意就是说可以自己输入一个时间戳,返回那个时间戳所对应的时间(按照公元和时分秒计时)。例如: + + >>> time.localtime(100000) + time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=11, tm_min=46, tm_sec=40, tm_wday=4, tm_yday=2, tm_isdst=0) + +**gmtime()** + +localtime()得到的是本地时间,如果要国际化,就最好使用格林威治时间。可以这样: + + >>> import time + >>> time.gmtime() + time.struct_time(tm_year=2015, tm_mon=5, tm_mday=4, tm_hour=23, tm_min=46, tm_sec=34, tm_wday=0, tm_yday=124, tm_isdst=0) + +>格林威治標準時間(中國大陸翻譯:格林尼治平均時間或格林尼治標準時間,台、港、澳翻譯:格林威治標準時間;英语:Greenwich Mean Time,GMT)是指位於英國倫敦郊區的皇家格林威治天文台的標準時間,因為本初子午線被定義在通過那裡的經線。 + +还有更友好的: + +**asctime()** + + >>> time.asctime() + 'Mon May 4 21:46:13 2015' + +`time.asctime()`的参数为空时,默认是以`time.localtime()`的值为参数,所以得到的是当前日期时间和星期。当然,也可以自己设置参数: + + >>> h = time.localtime(1000000) + >>> h + time.struct_time(tm_year=1970, tm_mon=1, tm_mday=12, tm_hour=21, tm_min=46, tm_sec=40, tm_wday=0, tm_yday=12, tm_isdst=0) + >>> time.asctime(h) + 'Mon Jan 12 21:46:40 1970' + +注意,`time.asctime()`的参数必须是时间元组,类似上面那种。不是时间戳,通过`time.time()`得到的时间戳,也可以转化为上面形式: + +**ctime()** + + >>> time.ctime() + 'Mon May 4 21:52:22 2015' + +在没有参数的时候,事实上是以`time.time()`的时间戳为参数。也可以自定义一个时间戳。 + + >>> time.ctime(1000000) + 'Mon Jan 12 21:46:40 1970' + +跟前面得到的结果是一样的。只不过是用了时间戳作为参数。 + +在前述函数中,通过localtime()、gmtime()得到的是时间元组,通过time()得到的是时间戳。有的函数如asctime()是以时间元组为参数,有的如ctime()是以时间戳为函数。这样做的目的是为了满足编程中多样化的需要。 + +**mktime()** + +mktime()也是以时间元组为参数,但是它返回的不是可读性更好的那种样式,而是: + + >>> lt = time.localtime() + >>> lt + time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=7, tm_min=55, tm_sec=29, tm_wday=1, tm_yday=125, tm_isdst=0) + >>> time.mktime(lt) + 1430783729.0 + +返回了时间戳。就类似于localtime()的逆过程(localtime()是以时间戳为参数)。 + +以上基本能够满足编程需要了吗?好像还缺点什么,因为在编程中,用的比较多的是“字符串”,似乎还没有将时间转化为字符串的函数。这个应该有。 + +**strftime()** + +函数格式稍微复杂一些。 + +>Help on built-in function strftime in module time: +> +>strftime(...) +> strftime(format[, tuple]) -> string +> +> Convert a time tuple to a string according to a format specification. +> See the library reference manual for formatting codes. When the time tuple +> is not present, current time as returned by localtime() is used. + +将时间元组按照指定格式要求转化为字符串。如果不指定时间元组,就默认为localtime()值。我说复杂,是在于其format,需要用到下面的东西。 + +| 格式| 含义| 取值范围(格式)| +|------|-------|-------------------| +|%y |去掉世纪的年份 |00-99,如"15"| +|%Y |完整的年份| 如"2015" | +|%j |指定日期是一年中的第几天| 001-366| +| %m| 返回月份| 01-12| +|%b| 本地简化月份的名称| 简写英文月份| +|%B| 本地完整月份的名称| 完整英文月份| +|%d| 该月的第几日| 如5月1日返回"01"| +|%H| 该日的第几时(24小时制)| 00-23| +|%l| 该日的第几时(12小时制)| 01-12| +|%M| 分钟| 00-59| +|%S| 秒 |00-59| +|%U| 在该年中的第多少星期(以周日为一周起点)| 00-53| +|%W| 同上,只不过是以周一为起点|00-53| +|%w| 一星期中的第几天 |0-6| +|%Z| 时区|在中国大陆测试,返回CST,即China Standard Time| +|%x| 日期| 日/月/年| +|%X| 时间| 时:分:秒| +|%c| 详细日期时间| 日/月/年 时:分:秒| +|%%| ‘%’字符 |‘%’字符| +|%p| 上下午| AM or PM| + +简要列举如下: + + >>> time.strftime("%y,%m,%d") + '15,05,05' + >>> time.strftime("%y/%m/%d") + '15/05/05' + +分隔符可以自由指定。既然已经变成字符串了,就可以“随心所欲不逾矩”了。 + +**strptime()** + +>Help on built-in function strptime in module time: +> +>strptime(...) +> strptime(string, format) -> struct_time +> +> Parse a string to a time tuple according to a format specification. +> See the library reference manual for formatting codes (same as strftime()). + +strptime()的作用是将字符串转化为时间元组。请注意的是,其参数要指定两个,一个是时间字符串,另外一个是时间字符串所对应的格式,格式符号用上表中的。例如: + + >>> today = time.strftime("%y/%m/%d") + >>> today + '15/05/05' + >>> time.strptime(today, "%y/%m/%d") + time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=125, tm_isdst=-1) + +##datetime + +虽然time模块已经能够把有关时间方面的东西搞定了,但是,在某些调用的时候,还感觉不是很直接,于是又出来了一个datetime模块,供程序猿和程序媛们选择使用。 + +datetime模块中有几个类: + +- datetime.date:日期类,常用的属性有year/month/day +- datetime.time:时间类,常用的有hour/minute/second/microsecond +- datetime.datetime:日期时间类 +- datetime.timedelta:时间间隔,即两个时间点之间的时间长度 +- datetime.tzinfo:时区类 + +###date类 + +通过实例了解常用的属性: + + >>> import datetime + >>> today = datetime.date.today() + >>> today + datetime.date(2015, 5, 5) + +这里其实生成了一个日期对象,然后操作这个对象的各种属性。用print语句,可以是视觉更佳: + + >>> print today + 2015-05-05 + >>> print today.ctime() + Tue May 5 00:00:00 2015 + >>> print today.timetuple() + time.struct_time(tm_year=2015, tm_mon=5, tm_mday=5, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=125, tm_isdst=-1) + >>> print today.toordinal() + 735723 + +特别注意,如果你妄图用`datetime.date.year()`,是会报错的,因为year不是一个方法,必须这样行: + + >>> print today.year + 2015 + >>> print today.month + 5 + >>> print today.day + 5 + +进一步看看时间戳与格式化时间格式的转换 + + >>> to = today.toordinal() + >>> to + 735723 + >>> print datetime.date.fromordinal(to) + 2015-05-05 + + >>> import time + >>> t = time.time() + >>> t + 1430787994.80093 + >>> print datetime.date.fromtimestamp(t) + 2015-05-05 + +还可以更灵活一些,修改日期。 + + >>> d1 = datetime.date(2015,5,1) + >>> print d1 + 2015-05-01 + >>> d2 = d1.replace(year=2005, day=5) + >>> print d2 + 2005-05-05 + +###time类 + +也要生成time对象 + + >>> t = datetime.time(1,2,3) + >>> print t + 01:02:03 + +它的常用属性: + + >>> print t.hour + 1 + >>> print t.minute + 2 + >>> print t.second + 3 + >>> t.microsecond + 0 + >>> print t.tzinfo + None + +###timedelta类 + +主要用来做时间的运算。比如: + + >>> now = datetime.datetime.now() + >>> print now + 2015-05-05 09:22:43.142520 + +没有讲述datetime类,因为在有了date和time类知识之后,这个类比较简单,我最喜欢这个now方法了。 + +对now增加5个小时 + + >>> b = now + datetime.timedelta(hours=5) + >>> print b + 2015-05-05 14:22:43.142520 + +增加两周 + + >>> c = now + datetime.timedelta(weeks=2) + >>> print c + 2015-05-19 09:22:43.142520 + +计算时间差: + + >>> d = c - b + >>> print d + 13 days, 19:00:00 + +------ + +[总目录](./index.md)   |   [上节:标准库(4)](./223.md)   |   [下节:标准库(6)](./225.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index d810b03..66dfe93 100644 --- a/index.md +++ b/index.md @@ -84,6 +84,7 @@ 3. [标准库(2)](./221.md)==>sys,copy 4. [标准库(3)](./222.md)==>os模块:操作文件、目录,查看修改属性,执行系统命令,打开网页 5. [标准库(4)](./223.md)==>堆的基本知识,heapq模块,deque模块 +6. [标准库(5)](./224.md)==>calendar模块、time模块、datetime模块 ##第柒章 保存数据 From 5522cb21f06fe5c6f2814cff3ccacdf22582230c Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 5 May 2015 22:30:51 +0800 Subject: [PATCH 028/417] urllib urllib2 --- 225.md | 241 ++++++++++++++++++++++++++++++++++++++++++++++ 2code/22501.py | 14 +++ 2images/22501.jpg | Bin 0 -> 266996 bytes index.md | 1 + 4 files changed, 256 insertions(+) create mode 100644 225.md create mode 100644 2code/22501.py create mode 100644 2images/22501.jpg diff --git a/225.md b/225.md new file mode 100644 index 0000000..b27e5de --- /dev/null +++ b/225.md @@ -0,0 +1,241 @@ +>弟兄们,我不是以为自己已经得着了,我只有一件事,就是忘记背后,努力面前的,向着标杆直跑,要得神在基督耶稣里从上面召我来得的奖赏。(PHILIPPIANS 3:13-14) + +#标准库(6) + +##urllib + +urllib模块用于读取来自网上(服务器上)的数据,比如不少人用python做爬虫程序,就可以使用这个模块。先看一个简单例子: + + >>> import urllib + >>> itdiffer = urllib.urlopen("http://www.itdiffer.com") + +这样就已经把我的网站[www.itdiffer.com](http://www.itdiffer.com)首页的内容拿过来了,得到了一个类似文件的对象。接下来的操作跟操作一个文件一样(如果忘记了文件怎么操作,可以参考:[《文件(1)](./126.md)) + + >>> print itdiffer.read() + + + + I am Qiwsir + ....//因为内容太多,下面就省略了 + +就这么简单,完成了对一个网页的抓取。当然,如果你真的要做爬虫程序,还不是仅仅如此。这里不介绍爬虫程序如何编写,仅说明urllib模块的常用属性和方法。 + + >>> dir(urllib) + ['ContentTooShortError', 'FancyURLopener', 'MAXFTPCACHE', 'URLopener', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_asciire', '_ftperrors', '_have_ssl', '_hexdig', '_hextochr', '_hostprog', '_is_unicode', '_localhost', '_noheaders', '_nportprog', '_passwdprog', '_portprog', '_queryprog', '_safe_map', '_safe_quoters', '_tagprog', '_thishost', '_typeprog', '_urlopener', '_userprog', '_valueprog', 'addbase', 'addclosehook', 'addinfo', 'addinfourl', 'always_safe', 'base64', 'basejoin', 'c', 'ftpcache', 'ftperrors', 'ftpwrapper', 'getproxies', 'getproxies_environment', 'i', 'localhost', 'noheaders', 'os', 'pathname2url', 'proxy_bypass', 'proxy_bypass_environment', 'quote', 'quote_plus', 're', 'reporthook', 'socket', 'splitattr', 'splithost', 'splitnport', 'splitpasswd', 'splitport', 'splitquery', 'splittag', 'splittype', 'splituser', 'splitvalue', 'ssl', 'string', 'sys', 'test1', 'thishost', 'time', 'toBytes', 'unquote', 'unquote_plus', 'unwrap', 'url2pathname', 'urlcleanup', 'urlencode', 'urlopen', 'urlretrieve'] + +选几个常用的介绍,其它的如果读者用到,可以通过查看文档了解。 + +**urlopen()** + +urlopen()主要用于打开url文件,然后就获得指定url的数据,接下来就如同在本地操作文件那样来操作。 + +>Help on function urlopen in module urllib: + +>urlopen(url, data=None, proxies=None) +> Create a file-like object for the specified URL to read from. + +得到的对象被叫做类文件。从名字中也可以理解后面的操作了。先对参数说明一下: + +- url:远程数据的路径,常常是网址 +- data:如果使用post方式,这里就是所提交的数据 +- proxies:设置代理 + +关于参数的详细说明,还可以参考[python的官方文档](https://docs.python.org/2/library/urllib.html),这里仅演示最常用的,如前面的例子那样。 + +当得到了类文件对象之后,就可以对它进行操作。变量itdiffer引用了得到的类文件对象,通过它查看: + + >>> dir(itdiffer) + ['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close', 'code', 'fileno', 'fp', 'getcode', 'geturl', 'headers', 'info', 'next', 'read', 'readline', 'readlines', 'url'] + +读者从这个结果中也可以看出,这个类文件对象也是可迭代的。常用的方法: + +- read(),readline(),readlines(),fileno(),close():都与文件操作一样,这里不再赘述。可以参考前面有关文件章节 +- info():返回头信息 +- getcode():返回http状态码 +- geturl():返回url + +简单举例: + + >>> itdiffer.info() + + >>> itdiffer.getcode() + 200 + >>> itdiffer.geturl() + 'http://www.itdiffer.com' + +更多情况下,已经建立了类文件对象,通过对文件操作方法,获得想要的数据。 + +**对url编码、解码** + +url对其中的字符有严格要求,不许可某些特殊字符,这就要对url进行编码和解码了。这个在进行web开发的时候特别要注意。urllib模块提供这种功能。 + +- quote(string[, safe]):对字符串进行编码。参数safe指定了不需要编码的字符 +- urllib.unquote(string) :对字符串进行解码 +- quote_plus(string [ , safe ] ) :与urllib.quote类似,但这个方法用'+'来替换空格`' '`,而quote用'%20'来代替空格 +- unquote_plus(string ) :对字符串进行解码; +- urllib.urlencode(query[, doseq]):将dict或者包含两个元素的元组列表转换成url参数。例如{'name': 'laoqi', 'age': 40}将被转换为"name=laoqi&age=40" +- pathname2url(path):将本地路径转换成url路径 +- url2pathname(path):将url路径转换成本地路径 + +看例子就更明白了: + + >>> du = "http://www.itdiffer.com/name=python book" + >>> urllib.quote(du) + 'http%3A//www.itdiffer.com/name%3Dpython%20book' + >>> urllib.quote_plus(du) + 'http%3A%2F%2Fwww.itdiffer.com%2Fname%3Dpython+book' + +注意看空格的变化,一个被编码成`%20`,另外一个是`+` + +再看解码的,假如在google中搜索`零基础 python`,结果如下图: + +![](./2images/22501.jpg) + +我的教程可是在这次搜索中排列第一个哦。 + +这不是重点,重点是看url,它就是用`+`替代空格了。 + + >>> dup = urllib.quote_plus(du) + >>> urllib.unquote_plus(dup) + 'http://www.itdiffer.com/name=python book' + +从解码效果来看,比较完美地逆过程。 + + >>> urllib.urlencode({"name":"qiwsir","web":"itdiffer.com"}) + 'web=itdiffer.com&name=qiwsir' + +这个在编程中,也会用到,特别是开发网站时候。 + +**urlretrieve()** + +虽然urlopen()能够建立类文件对象,但是,那还不等于将远程文件保存在本地存储器中,urlretrieve()就是满足这个需要的。先看实例: + + >>> import urllib + >>> urllib.urlretrieve("http://www.itdiffer.com/images/me.jpg","me.jpg") + ('me.jpg', ) + >>> + +me.jpg是一张存在于服务器上的图片,地址是:http://www.itdiffer.com/images/me.jpg,把它保存到本地存储器中,并且仍旧命名为me.jpg。注意,如果只写这个名字,表示存在启动python交互模式的那个目录中,否则,可以指定存储具体目录和文件名。 + +在[urllib官方文档](https://docs.python.org/2/library/urllib.html)中有一大段相关说明,读者可以去认真阅读。这里仅简要介绍一下相关参数。 + +`urllib.urlretrieve(url[, filename[, reporthook[, data]]])` + +- url:文件所在的网址 +- filename:可选。将文件保存到本地的文件名,如果不指定,urllib会生成一个临时文件来保存 +- reporthook:可选。是回调函数,当链接服务器和相应数据传输完毕时触发本函数 +- data:可选。如果用post方式所发出的数据 + +函数执行完毕,返回的结果是一个元组(filename, headers),filename是保存到本地的文件名,headers是服务器响应头信息。 + + #!/usr/bin/env python + # coding=utf-8 + + import urllib + + def go(a,b,c): + per = 100.0 * a * b / c + if per > 100: + per = 100 + print "%.2f%%" % per + + url = "http://youxi.66wz.com/uploads/1046/1321/11410192.90d133701b06f0cc2826c3e5ac34c620.jpg" + local = "/home/qw/Pictures/g.jpg" + urllib.urlretrieve(url, local, go) + +这段程序就是要下载指定的图片,并且保存为本地指定位置的文件,同时要显示下载的进度。上述文件保存之后,执行,显示如下效果: + + $ python 22501.py + 0.00% + 8.13% + 16.26% + 24.40% + 32.53% + 40.66% + 48.79% + 56.93% + 65.06% + 73.19% + 81.32% + 89.46% + 97.59% + 100.00% + +到相应目录中查看,能看到与网上地址一样的文件。我这里就不对结果截图了,唯恐少部分读者鼻子流血。 + +##urllib2 + +urllib2是另外一个模块,它跟urllib有相似的地方——都是对url相关的操作,也有不同的地方。关于这方面,有一篇文章讲的不错:[Python: difference between urllib and urllib2](http://www.hacksparrow.com/python-difference-between-urllib-and-urllib2.html) + +我选取一段,供大家参考: + +>urllib2 can accept a Request object to set the headers for a URL request, urllib accepts only a URL. That means, you cannot masquerade your User Agent string etc. + +>urllib provides the urlencode method which is used for the generation of GET query strings, urllib2 doesn't have such a function. This is one of the reasons why urllib is often used along with urllib2. + +所以,有时候两个要同时使用,urllib模块和urllib2模块有的方法可以相互替代,有的不能。看下面的属性方法列表就知道了。 + + >>> dir(urllib2) + ['AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'AbstractHTTPHandler', 'BaseHandler', 'CacheFTPHandler', 'FTPHandler', 'FileHandler', 'HTTPBasicAuthHandler', 'HTTPCookieProcessor', 'HTTPDefaultErrorHandler', 'HTTPDigestAuthHandler', 'HTTPError', 'HTTPErrorProcessor', 'HTTPHandler', 'HTTPPasswordMgr', 'HTTPPasswordMgrWithDefaultRealm', 'HTTPRedirectHandler', 'HTTPSHandler', 'OpenerDirector', 'ProxyBasicAuthHandler', 'ProxyDigestAuthHandler', 'ProxyHandler', 'Request', 'StringIO', 'URLError', 'UnknownHandler', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_cut_port_re', '_opener', '_parse_proxy', '_safe_gethostbyname', 'addinfourl', 'base64', 'bisect', 'build_opener', 'ftpwrapper', 'getproxies', 'hashlib', 'httplib', 'install_opener', 'localhost', 'mimetools', 'os', 'parse_http_list', 'parse_keqv_list', 'posixpath', 'proxy_bypass', 'quote', 'random', 'randombytes', 're', 'request_host', 'socket', 'splitattr', 'splithost', 'splitpasswd', 'splitport', 'splittag', 'splittype', 'splituser', 'splitvalue', 'sys', 'time', 'toBytes', 'unquote', 'unwrap', 'url2pathname', 'urlopen', 'urlparse', 'warnings'] + +比较常用的比如urlopen()跟urllib.open()是完全类似的。 + +**Request类** + +正如前面区别urllib和urllib2所讲,利用urllib2模块可以建立一个Request对象。方法就是: + + >>> req = urllib2.Request("http://www.itdiffer.com") + +建立了Request对象之后,它的最直接应用就是可以作为urlopen()方法的参数 + + >>> response = urllib2.urlopen(req) + >>> page = response.read() + >>> print page + +因为与前面的`urllib.open("http://www.itdiffer.com")`结果一样,就不浪费篇幅了。 + +但是,如果Request对象仅仅局限于此,似乎还没有什么太大的优势。因为刚才的访问仅仅是满足以get方式请求页面,并建立类文件对象。如果是通过post向某地址提交数据,也可以建立Request对象。 + + import urllib + import urllib2 + + url = 'http://www.itdiffer.com/register.py' + + values = {'name' : 'qiwsir', + 'location' : 'China', + 'language' : 'Python' } + + data = urllib.urlencode(values) # 编码 + req = urllib2.Request(url, data) # 发送请求同时传data表单 + response = urllib2.urlopen(req) #接受反馈的信息 + the_page = response.read() #读取反馈的内容 + +注意,读者不能照抄上面的程序,然后运行代码。因为那个url中没有相应的接受客户端post上去的data的程序文件。上面的代码只是以一个例子来显示Request对象的另外一个用途,还有就是在这个例子中是以post方式提交数据。 + +在网站中,有的会通过User-Agent来判断访问者是浏览器还是别的程序,如果通过别的程序访问,它有可能拒绝。这时候,我们编写程序去访问,就要设置headers了。设置方法是: + + user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' + headers = { 'User-Agent' : user_agent } + +然后重新建立Request对象: + + req = urllib2.Request(url, data, headers) + +再用urlopen()方法访问: + + response = urllib2.urlopen(req) + +除了上面演示之外,urllib2模块的东西还很多,比如还可以: + +- 设置HTTP Proxy +- 设置Timeout值 +- 自动redirect +- 处理cookie + +等等。这些内容不再一一介绍,当需要用到的时候可以查看文档或者google。 + +------ + +[总目录](./index.md)   |   [上节:标准库(5)](./224.md)   |   [下节:标准库(7)](./226.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/22501.py b/2code/22501.py new file mode 100644 index 0000000..b10a271 --- /dev/null +++ b/2code/22501.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +# coding=utf-8 + +import urllib + +def go(a,b,c): + per = 100.0 * a * b / c + if per > 100: + per = 100 + print "%.2f%%" % per + +url = "http://youxi.66wz.com/uploads/1046/1321/11410192.90d133701b06f0cc2826c3e5ac34c620.jpg" +local = "/home/qw/Pictures/g.jpg" +urllib.urlretrieve(url, local, go) diff --git a/2images/22501.jpg b/2images/22501.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f79ba00b85078897ec85b584407822baea0edec3 GIT binary patch literal 266996 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

%p+WByr*Giog6wdF+w`PfmNZ>rn@i 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模块:操作文件、目录,查看修改属性,执行系统命令,打开网页 5. [标准库(4)](./223.md)==>堆的基本知识,heapq模块,deque模块 6. [标准库(5)](./224.md)==>calendar模块、time模块、datetime模块 +7. [标准库(6)](./224.md)==>urllib模块、urllib2模块 ##第柒章 保存数据 From 50f115159568c6fc84506890d07a72f7fff71364 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 5 May 2015 22:32:32 +0800 Subject: [PATCH 029/417] urllib,urllib2 --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index a51e40a..3b4c32f 100644 --- a/index.md +++ b/index.md @@ -85,7 +85,7 @@ 4. [标准库(3)](./222.md)==>os模块:操作文件、目录,查看修改属性,执行系统命令,打开网页 5. [标准库(4)](./223.md)==>堆的基本知识,heapq模块,deque模块 6. [标准库(5)](./224.md)==>calendar模块、time模块、datetime模块 -7. [标准库(6)](./224.md)==>urllib模块、urllib2模块 +7. [标准库(6)](./225.md)==>urllib模块、urllib2模块 ##第柒章 保存数据 From 61ad7ddbe84c7cf30f723b0b1d5a147ab5bcfb74 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 6 May 2015 15:13:20 +0800 Subject: [PATCH 030/417] xml.etree.elementtree --- 226.md | 562 ++++++++++++++++++++++++++++++++++++++++++++++ 2code/22601.xml | 8 + 2images/22601.jpg | Bin 0 -> 57918 bytes index.md | 1 + 4 files changed, 571 insertions(+) create mode 100644 226.md create mode 100644 2code/22601.xml create mode 100644 2images/22601.jpg diff --git a/226.md b/226.md new file mode 100644 index 0000000..a4296da --- /dev/null +++ b/226.md @@ -0,0 +1,562 @@ +>你们要靠主常常喜乐;我再说,你们要喜乐。当叫众人知道你们谦让的心。主已经近了。应当一无挂虑,只要凡事藉着祷告、祈求和感谢,将你们所要的告诉神。神所赐出人意外的平安,比在基督耶稣里面保守你们的心怀意念。(PHILIPPIANS 4:4-8) + +标准库(7) + +##xml + +xml在软件领域用途非常广泛,有名人曰: + +>“当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴。有史以来第一次,这个世界拥有了一种用来结构化文档和数据的通用且适应性强的格式,它不仅仅可以用于 WEB,而且可以被用于任何地方。” + +>---《Designing With Web Standards Second Edition》, Jeffrey Zeldman + +对于xml如果要做一个定义式的说明,就不得不引用w3school里面简洁而明快的说明: + +- XML 指可扩展标记语言(EXtensible Markup Language) +- XML 是一种标记语言,很类似 HTML +- XML 的设计宗旨是传输数据,而非显示数据 +- XML 标签没有被预定义。您需要自行定义标签。 +- XML 被设计为具有自我描述性。 +- XML 是 W3C 的推荐标准 + +如果读者要详细了解和学习有关xml,可以阅读[w3school的教程](http://www.w3school.com.cn/xml/xml_intro.asp) + +xml的重要,关键在于它是用来传输数据,因为传输数据,特别是在web编程中,经常要用到的。有了这样一种东西,就让数据传输变得简单了。对于这么重要的,python当然有支持。 + +一般来讲,一个引人关注的东西,总会有很多人从不同侧面去关注。在编程语言中也是如此,所以,对xml这个明星式的东西,python提供了多种模块来处理。 + +- xml.dom.* 模块:Document Object Model。适合用于处理 DOM API。它能够将xml数据在内存中解析成一个树,然后通过对树的操作来操作xml。但是,这种方式由于将xml数据映射到内存中的树,导致比较慢,且消耗更多内存。 +- xml.sax.* 模块:simple API for XML。由于SAX以流式读取xml文件,从而速度较快,切少占用内存,但是操作上稍复杂,需要用户实现回调函数。 +- xml.parser.expat:是一个直接的,低级一点的基于 C 的 expat 的语法分析器。 expat接口基于事件反馈,有点像 SAX 但又不太像,因为它的接口并不是完全规范于 expat 库的。 +- xml.etree.ElementTree (以下简称 ET):元素树。它提供了轻量级的python式的API,相对于DOM,ET快了很多 +,而且有很多令人愉悦的API可以使用;相对于SAX,ET也有ET.iterparse提供了 “在空中” 的处理方式,没有必要加载整个文档到内存,节省内存。ET的性能的平均值和SAX差不多,但是API的效率更高一点而且使用起来很方便。 + +所以,我用xml.etree.ElementTree + +ElementTree在标准库中有两种实现。一种是纯Python实现:xml.etree.ElementTree ,另外一种是速度快一点:xml.etree.cElementTree 。 + +如果读者使用的是python2.x,可以像这样引入模块: + + try: + import xml.etree.cElementTree as ET + except ImportError: + import xml.etree.ElementTree as ET + +如果是Python3.3以上,就没有这个必要了,只需要一句话`import xml.etree.ElementTree as ET`即可,然后由模块自动来寻找适合的方式。显然python3.x相对python2.x有了很大进步。但是,本教程碍于很多工程项目还没有升级换代,暂且忍受了。 + +###遍历查询 + +先要搞一个xml文档。为了图省事,我就用w3school中的一个例子: + +![](./2images/22601.jpg) + +这是一个xml树,只不过是用图来表示的,还没有用ET解析呢。把这棵树写成xml文档格式: + + + + Everyday Italian + Giada De Laurentiis + 2005 + 30.00 + + + Harry Potter + J K. Rowling + 2005 + 29.99 + + + Learning XML + Erik T. Ray + 2003 + 39.95 + + + +将xml保存为名为22601.xml的文件,然后对其进行如下操作: + + >>> import xml.etree.cElementTree as ET + +为了简化,我用这种方式引入,如果在编程实践中,推荐读者使用try...except...方式。 + + >>> tree = ET.ElementTree(file="22601.xml") + >>> tree + + +建立起xml解析树。然后可以通过根节点向下开始读取各个元素(element对象)。 + +在上述xml文档中,根元素是,它没有属性,或者属性为空。 + + >>> root = tree.getroot() #获得根 + >>> root.tag + 'bookstore' + >>> root.attrib + {} + +要想将根下面的元素都读出来,可以: + + >>> for child in root: + ... print child.tag, child.attrib + ... + book {'category': 'COOKING'} + book {'category': 'CHILDREN'} + book {'category': 'WEB'} + +也可以这样读取指定元素的信息: + + >>> root[0].tag + 'book' + >>> root[0].attrib + {'category': 'COOKING'} + >>> root[0].text #无内容 + '\n ' + +再深点,就有感觉了: + + >>> root[0][0].tag + 'title' + >>> root[0][0].attrib + {'lang': 'en'} + >>> root[0][0].text + 'Everyday Italian' + +对于ElementTree对象,有一个iter方法可以对指定名称的子节点进行深度优先遍历。例如: + + >>> for ele in tree.iter(tag="book"): #遍历名称为book的节点 + ... print ele.tag, ele.attrib + ... + book {'category': 'COOKING'} + book {'category': 'CHILDREN'} + book {'category': 'WEB'} + + >>> for ele in tree.iter(tag="title"): #遍历名称为title的节点 + ... print ele.tag, ele.attrib, ele.text + ... + title {'lang': 'en'} Everyday Italian + title {'lang': 'en'} Harry Potter + title {'lang': 'en'} Learning XML + +如果不指定元素名称,就是将所有的元素遍历一边。 + + >>> for ele in tree.iter(): + ... print ele.tag, ele.attrib + ... + bookstore {} + book {'category': 'COOKING'} + title {'lang': 'en'} + author {} + year {} + price {} + book {'category': 'CHILDREN'} + title {'lang': 'en'} + author {} + year {} + price {} + book {'category': 'WEB'} + title {'lang': 'en'} + author {} + year {} + price {} + +除了上面的方法,还可以通过路径,搜索到指定的元素,读取其内容。这就是xpath。此处对xpath不详解,如果要了解可以到网上搜索有关信息。 + + >>> for ele in tree.iterfind("book/title"): + ... print ele.text + ... + Everyday Italian + Harry Potter + Learning XML + +利用findall()方法,也可以是实现查找功能: + + >>> for ele in tree.findall("book"): + ... title = ele.find('title').text + ... price = ele.find('price').text + ... lang = ele.find('title').attrib + ... print title, price, lang + ... + Everyday Italian 30.00 {'lang': 'en'} + Harry Potter 29.99 {'lang': 'en'} + Learning XML 39.95 {'lang': 'en'} + +###编辑 + +除了读取有关数据之外,还能对xml进行编辑,即增删改查功能。还是以上面的xml文档为例: + + >>> root[1].tag + 'book' + >>> del root[1] + >>> for ele in root: + ... print ele.tag + ... + book + book + +如此,成功删除了一个节点。原来有三个book节点,现在就还剩两个了。打开源文件再看看,是不是正好少了第二个节点呢?一定很让你失望,源文件居然没有变化。 + +的确如此,源文件没有变化,这就对了。因为至此的修改动作,还是停留在内存中,还没有将修改结果输出到文件。不要忘记,我们是在内存中建立的ElementTree对象。再这样做: + + >>> import os + >>> outpath = os.getcwd() + >>> file = outpath + "/22601.xml" + +把当前文件路径拼装好。然后: + + >>> tree.write(file) + +再看源文件,已经变成两个节点了。 + +除了删除,也能够修改: + + >>> for price in root.iter("price"): #原来每本书的价格 + ... print price.text + ... + 30.00 + 39.95 + >>> for price in root.iter("price"): #每本上涨7元,并且增加属性标记 + ... new_price = float(price.text) + 7 + ... price.text = str(new_price) + ... price.set("updated","up") + ... + >>> tree.write(file) + +查看源文件: + + + + Everyday Italian + Giada De Laurentiis + 2005 + 37.0 + + + Learning XML + Erik T. Ray + 2003 + 46.95 + + + +不仅价格修改了,而且在price标签里面增加了属性标记。干得不错。 + +上面用`del`来删除某个元素,其实,在编程中,这个用的不多,更喜欢用remove()方法。比如我要删除`price > 40`的书。可以这么做: + + >>> for book in root.findall("book"): + ... price = book.find("price").text + ... if float(price) > 40.0: + ... root.remove(book) + ... + >>> tree.write(file) + +于是就这样了: + + + + Everyday Italian + Giada De Laurentiis + 2005 + 37.0 + + + +接下来就要增加元素了。 + + >>> import xml.etree.cElementTree as ET + >>> tree = ET.ElementTree(file="22601.xml") + >>> root = tree.getroot() + >>> ET.SubElement(root, "book") #在root里面添加book节点 + + >>> for ele in root: + ... print ele.tag + ... + book + book + >>> b2 = root[1] #得到新增的book节点 + >>> b2.text = "python" #添加内容 + >>> tree.write("22601.xml") + +查看源文件: + + + + Everyday Italian + Giada De Laurentiis + 2005 + 37.0 + + python + + +###常用属性和方法总结 + +ET里面的属性和方法不少,这里列出常用的,供使用中备查。 + +**Element对象** + +常用属性: + +- tag:string,元素数据种类 +- text:string,元素的内容 +- attrib:dictionary,元素的属性字典 +- tail:string,元素的尾形 + +针对属性的操作 + +- clear():清空元素的后代、属性、text和tail也设置为None +- get(key, default=None):获取key对应的属性值,如该属性不存在则返回default值 +- items():根据属性字典返回一个列表,列表元素为(key, value) +- keys():返回包含所有元素属性键的列表 +- set(key, value):设置新的属性键与值 + +针对后代的操作 + +- append(subelement):添加直系子元素 +- extend(subelements):增加一串元素对象作为子元素 +- find(match):寻找第一个匹配子元素,匹配对象可以为tag或path +- findall(match):寻找所有匹配子元素,匹配对象可以为tag或path +- findtext(match):寻找第一个匹配子元素,返回其text值。匹配对象可以为tag或path +- insert(index, element):在指定位置插入子元素 +- iter(tag=None):生成遍历当前元素所有后代或者给定tag的后代的迭代器 +- iterfind(match):根据tag或path查找所有的后代 +- itertext():遍历所有后代并返回text值 +- remove(subelement):删除子元素 + +**ElementTree对象** + +- find(match) +- findall(match) +- findtext(match, default=None) +- getroot():获取根节点. +- iter(tag=None) +- iterfind(match) +- parse(source, parser=None):装载xml对象,source可以为文件名或文件类型对象. +- write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None,method="xml")  + +最后,提供一个参考,这是一篇来自网络的文章:[Python xml属性、节点、文本的增删改](http://blog.csdn.net/wklken/article/details/7603071),本文的源码我也复制到下面,请读者参考: + +>实现思想: + +>使用ElementTree,先将文件读入,解析成树,之后,根据路径,可以定位到树的每个节点,再对节点进行修改,最后直接将其输出. + + #!/usr/bin/python + # -*- coding=utf-8 -*- + # author : wklken@yeah.net + # date: 2012-05-25 + # version: 0.1 + + from xml.etree.ElementTree import ElementTree,Element + + def read_xml(in_path): + ''' + 读取并解析xml文件 + in_path: xml路径 + return: ElementTree + ''' + tree = ElementTree() + tree.parse(in_path) + return tree + + def write_xml(tree, out_path): + ''' + 将xml文件写出 + tree: xml树 + out_path: 写出路径 + ''' + tree.write(out_path, encoding="utf-8",xml_declaration=True) + + def if_match(node, kv_map): + ''' + 判断某个节点是否包含所有传入参数属性 + node: 节点 + kv_map: 属性及属性值组成的map + ''' + for key in kv_map: + if node.get(key) != kv_map.get(key): + return False + return True + + #---------------search ----- + + def find_nodes(tree, path): + ''' + 查找某个路径匹配的所有节点 + tree: xml树 + path: 节点路径 + ''' + return tree.findall(path) + + def get_node_by_keyvalue(nodelist, kv_map): + ''' + 根据属性及属性值定位符合的节点,返回节点 + nodelist: 节点列表 + kv_map: 匹配属性及属性值map + ''' + result_nodes = [] + for node in nodelist: + if if_match(node, kv_map): + result_nodes.append(node) + return result_nodes + + #---------------change ----- + + def change_node_properties(nodelist, kv_map, is_delete=False): + ''' + 修改/增加 /删除 节点的属性及属性值 + nodelist: 节点列表 + kv_map:属性及属性值map + ''' + for node in nodelist: + for key in kv_map: + if is_delete: + if key in node.attrib: + del node.attrib[key] + else: + node.set(key, kv_map.get(key)) + + def change_node_text(nodelist, text, is_add=False, is_delete=False): + ''' + 改变/增加/删除一个节点的文本 + nodelist:节点列表 + text : 更新后的文本 + ''' + for node in nodelist: + if is_add: + node.text += text + elif is_delete: + node.text = "" + else: + node.text = text + + def create_node(tag, property_map, content): + ''' + 新造一个节点 + tag:节点标签 + property_map:属性及属性值map + content: 节点闭合标签里的文本内容 + return 新节点 + ''' + element = Element(tag, property_map) + element.text = content + return element + + def add_child_node(nodelist, element): + ''' + 给一个节点添加子节点 + nodelist: 节点列表 + element: 子节点 + ''' + for node in nodelist: + node.append(element) + + def del_node_by_tagkeyvalue(nodelist, tag, kv_map): + ''' + 同过属性及属性值定位一个节点,并删除之 + nodelist: 父节点列表 + tag:子节点标签 + kv_map: 属性及属性值列表 + ''' + for parent_node in nodelist: + children = parent_node.getchildren() + for child in children: + if child.tag == tag and if_match(child, kv_map): + parent_node.remove(child) + + + if __name__ == "__main__": + + #1. 读取xml文件 + tree = read_xml("./test.xml") + + #2. 属性修改 + #A. 找到父节点 + nodes = find_nodes(tree, "processers/processer") + + #B. 通过属性准确定位子节点 + result_nodes = get_node_by_keyvalue(nodes, {"name":"BProcesser"}) + + #C. 修改节点属性 + change_node_properties(result_nodes, {"age": "1"}) + + #D. 删除节点属性 + change_node_properties(result_nodes, {"value":""}, True) + + #3. 节点修改 + #A.新建节点 + a = create_node("person", {"age":"15","money":"200000"}, "this is the firest content") + + #B.插入到父节点之下 + add_child_node(result_nodes, a) + + #4. 删除节点 + #定位父节点 + del_parent_nodes = find_nodes(tree, "processers/services/service") + + #准确定位子节点并删除之 + target_del_node = del_node_by_tagkeyvalue(del_parent_nodes, "chain", {"sequency" : "chain1"}) + + #5. 修改节点文本 + #定位节点 + text_nodes = get_node_by_keyvalue(find_nodes(tree, "processers/services/service/chain"), {"sequency":"chain3"}) + change_node_text(text_nodes, "new text") + + #6. 输出到结果文件 + write_xml(tree, "./out.xml") + +操作对象(原始xml文件): + + + + + + + + + + + + + + + + + + + + + + + +执行程序之后,得到的结果文件: + + + + + + + + this is the firest content + + + this is the firest content + + + + + + + + + new text + + + + + +------ + +[总目录](./index.md)   |   [上节:标准库(6)](./225.md)   |   [下节:标准库(8)](./227.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/22601.xml b/2code/22601.xml new file mode 100644 index 0000000..45a12d9 --- /dev/null +++ b/2code/22601.xml @@ -0,0 +1,8 @@ + + + Everyday Italian + Giada De Laurentiis + 2005 + 37.0 + + python \ No newline at end of file diff --git a/2images/22601.jpg b/2images/22601.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9538cf1d87e3348d75cb0d9512ef2e5ce431bfc1 GIT binary patch literal 57918 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堆的基本知识,heapq模块,deque模块 6. [标准库(5)](./224.md)==>calendar模块、time模块、datetime模块 7. [标准库(6)](./225.md)==>urllib模块、urllib2模块 +8. [标准库(7)](./226.md)==>xml.etree.ElementTree模块:遍历查询、增删改查xml,应用实例 ##第柒章 保存数据 From 0c9b12611cd2d5916459bdce6827996b87247302 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 6 May 2015 15:16:26 +0800 Subject: [PATCH 031/417] xml --- 226.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/226.md b/226.md index a4296da..d383c63 100644 --- a/226.md +++ b/226.md @@ -332,6 +332,8 @@ ET里面的属性和方法不少,这里列出常用的,供使用中备查。 - parse(source, parser=None):装载xml对象,source可以为文件名或文件类型对象. - write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None,method="xml")  +###一个实例 + 最后,提供一个参考,这是一篇来自网络的文章:[Python xml属性、节点、文本的增删改](http://blog.csdn.net/wklken/article/details/7603071),本文的源码我也复制到下面,请读者参考: >实现思想: From 43f20918314565bd6d3ab4aa1d51ebb8b89874e3 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 6 May 2015 20:14:05 +0800 Subject: [PATCH 032/417] xml --- 226.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/226.md b/226.md index d383c63..04246a3 100644 --- a/226.md +++ b/226.md @@ -1,4 +1,4 @@ ->你们要靠主常常喜乐;我再说,你们要喜乐。当叫众人知道你们谦让的心。主已经近了。应当一无挂虑,只要凡事藉着祷告、祈求和感谢,将你们所要的告诉神。神所赐出人意外的平安,比在基督耶稣里面保守你们的心怀意念。(PHILIPPIANS 4:4-8) +>你们要靠主常常喜乐;我再说,你们要喜乐。当叫众人知道你们谦让的心。主已经近了。应当一无挂虑,只要凡事藉着祷告、祈求和感谢,将你们所要的告诉神。神所赐出人意外的平安,比在基督耶稣里面保守你们的心怀意念。(PHILIPPIANS 4:4-7) 标准库(7) From afc6e975a8f005f1138cda274084978f984198ff Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 6 May 2015 20:14:29 +0800 Subject: [PATCH 033/417] json --- 227.md | 173 +++++++++++++++++++++++++++++++++++++++++++++++++ 2code/22701.py | 46 +++++++++++++ index.md | 1 + 3 files changed, 220 insertions(+) create mode 100644 227.md create mode 100644 2code/22701.py diff --git a/227.md b/227.md new file mode 100644 index 0000000..c028095 --- /dev/null +++ b/227.md @@ -0,0 +1,173 @@ +>所以你们既是神的选民,圣洁蒙爱的人,就要存怜悯、恩慈、谦虚、温柔、忍耐的心。倘若这人与那人有嫌隙,总要彼此包容,彼此饶恕;主怎么饶恕了你们,你们也要怎样饶恕人。在这一切之外,要存着爱心,爱心就是联络全德的。又要叫基督的平安在你们心里作主,你们也为此蒙召,归为一体,且要存感谢的心。(COLOSSIANS 3:12-15) + +#标准库(8) + +##json + +就传递数据而言,xml是一种选择,还有另外一种,就是json,它是一种轻量级的数据交换格式,如果读者要做web编程,是会用到它的。根据维基百科的相关内容,对json了解一二: + +>JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文本格式,並且採用了類似於C語言家族的一些習慣。 + +关于json更为详细的内容,可以参考其官方网站:http://www.json.org + +从官方网站上摘取部分,了解一下json的结构: + +>JSON建构于两种结构: + +- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 +- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。 + +python标准库中有json模块,主要是执行序列化和反序列化功能: + +- 序列化:encoding,把一个python对象编码转化成json字符串 +- 反序列化:decoding,把json格式字符串解码转换为python数据对象 + +###基本操作 + +json模块相对xml单纯了很多: + + >>> import json + >>> json.__all__ + ['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder'] + +**encoding: dumps()** + + >>> data = [{"name":"qiwsir", "lang":("python", "english"), "age":40}] + >>> print data + [{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}] + >>> data_json = json.dumps(data) + >>> print data_json + [{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}] + +encoding的操作是比较简单的,请注意观察data和data_json的不同——lang的值从元组编程了列表,还有不同: + + >>> type(data_json) + + >>> type(data) + + +将python对象转化为json类型,是按照下表所示对照关系转化的: + +|python==>|json| +|------|----| +|dict|object| +|list, tuple|array| +|str, unicode|string| +|int, long, float|number| +|True|true| +|False|false| +|None|null| + +**decoding: loads()** + +decoding的过程也像上面一样简单: + + >>> new_data = json.loads(data_json) + >>> new_data + [{u'lang': [u'python', u'english'], u'age': 40, u'name': u'qiwsir'}] + +需要注意的是,解码之后,并没有将元组还原。 + +解码的数据类型对应关系: + +|json==>|python| +|-------|------| +|object|dict| +|array|list| +|string|unicode| +|number(int)|int, long| +|number(real)|float| +|true|True| +|false|False| +|null|None| + +**对人友好** + +上面的data都不是很长,还能凑合阅读,如果很长了,阅读就有难度了。所以,json的dumps()提供了可选参数,利用它们能在输出上对人更友好(这对机器是无所谓的)。 + + >>> data_j = json.dumps(data, sort_keys=True, indent=2) + >>> print data_j + [ + { + "age": 40, + "lang": [ + "python", + "english" + ], + "name": "qiwsir" + } + ] + +`sort_keys=True`意思是按照键的字典顺序排序,`indent=2`是让每个键值对显示的时候,以缩进两个字符对齐。这样的视觉效果好多了。 + +###大json字符串 + +如果数据不是很大,上面的操作足够了。但是,上面操作是将数据都读入内存,如果太大就不行了。怎么办?json提供了`load()`和`dump()`函数解决这个问题,注意,跟上面已经用过的函数相比,是不同的,请仔细观察。 + + >>> import tempfile #临时文件模块 + >>> data + [{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}] + >>> f = tempfile.NamedTemporaryFile(mode='w+') + >>> json.dump(data, f) + >>> f.flush() + >>> print open(f.name, "r").read() + [{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}] + +###自定义数据类型 + +一般情况下,用的数据类型都是python默认的。但是,我们学习过类后,就知道,自己可以定义对象类型的。比如: + +以下代码参考:[Json概述以及python对json的相关操作](http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html) + + #!/usr/bin/env python + # coding=utf-8 + + import json + + class Person(object): + def __init__(self,name,age): + self.name = name + self.age = age + + def __repr__(self): + return 'Person Object name : %s , age : %d' % (self.name,self.age) + + + def object2dict(obj): #convert Person to dict + d = {} + d['__class__'] = obj.__class__.__name__ + d['__module__'] = obj.__module__ + d.update(obj.__dict__) + return d + + def dict2object(d): #convert dict ot Person + if '__class__' in d: + class_name = d.pop('__class__') + module_name = d.pop('__module__') + module = __import__(module_name) + class_ = getattr(module, class_name) + args = dict((key.encode('ascii'), value) for key,value in d.items()) #get args + inst = class_(**args) #create new instance + else: + inst = d + return inst + + + if __name__ == '__main__': + p = Person('Peter',40) + print p + d = object2dict(p) + print d + o = dict2object(d) + print type(o), o + + dump = json.dumps(p, default=object2dict) + print dump + load = json.loads(dump, object_hook=dict2object) + print load + +------ + +[总目录](./index.md)   |   [上节:标准库(7)](./226.md)   |   [下节:第三方库](./228.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/22701.py b/2code/22701.py new file mode 100644 index 0000000..da09e64 --- /dev/null +++ b/2code/22701.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# coding=utf-8 + +import json + +class Person(object): + def __init__(self,name,age): + self.name = name + self.age = age + + def __repr__(self): + return 'Person Object name : %s , age : %d' % (self.name,self.age) + + +def object2dict(obj): #convert Person to dict + d = {} + d['__class__'] = obj.__class__.__name__ + d['__module__'] = obj.__module__ + d.update(obj.__dict__) + return d + +def dict2object(d): #convert dict ot Person + if '__class__' in d: + class_name = d.pop('__class__') + module_name = d.pop('__module__') + module = __import__(module_name) + class_ = getattr(module, class_name) + args = dict((key.encode('ascii'), value) for key,value in d.items()) #get args + inst = class_(**args) #create new instance + else: + inst = d + return inst + + +if __name__ == '__main__': + p = Person('Peter',40) + print p + d = object2dict(p) + print d + o = dict2object(d) + print type(o), o + + dump = json.dumps(p, default=object2dict) + print dump + load = json.loads(dump, object_hook=dict2object) + print load diff --git a/index.md b/index.md index 6c540ff..6cdfad5 100644 --- a/index.md +++ b/index.md @@ -87,6 +87,7 @@ 6. [标准库(5)](./224.md)==>calendar模块、time模块、datetime模块 7. [标准库(6)](./225.md)==>urllib模块、urllib2模块 8. [标准库(7)](./226.md)==>xml.etree.ElementTree模块:遍历查询、增删改查xml,应用实例 +9. [标准库(8)](./2277.md)==>json模块:dumps(),loads(),dump(),load(),自定义类型数据的json编码和解码 ##第柒章 保存数据 From 727204e39470927b3998202c28747a462bbef17b Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 6 May 2015 20:16:37 +0800 Subject: [PATCH 034/417] xml --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 6cdfad5..0f1f04b 100644 --- a/index.md +++ b/index.md @@ -87,7 +87,7 @@ 6. [标准库(5)](./224.md)==>calendar模块、time模块、datetime模块 7. [标准库(6)](./225.md)==>urllib模块、urllib2模块 8. [标准库(7)](./226.md)==>xml.etree.ElementTree模块:遍历查询、增删改查xml,应用实例 -9. [标准库(8)](./2277.md)==>json模块:dumps(),loads(),dump(),load(),自定义类型数据的json编码和解码 +9. [标准库(8)](./227.md)==>json模块:dumps(),loads(),dump(),load(),自定义类型数据的json编码和解码 ##第柒章 保存数据 From 2c79f9491ba098003161eaea6ce9115eb396dd72 Mon Sep 17 00:00:00 2001 From: azio Date: Wed, 6 May 2015 20:56:56 +0800 Subject: [PATCH 035/417] Correction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 纠错 --- 108.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/108.md b/108.md index cfd1d86..439eaab 100644 --- a/108.md +++ b/108.md @@ -8,7 +8,7 @@ 在python中,把像字符串这样的对象类型(后面还会冒出来类似的其它有这种特点的对象类型,比如列表),统称为序列。顾名思义,序列就是“有序排列”。 -比如水泊梁山的108个好汉(里面分明也有女的,难道女汉子是从这里来的吗?),就是一个“有序排列”的序列。从老大宋江一直排到第108位金毛犬段景。在这个序列中,每个人有编号,编号和每个人一一对应。1号是宋江,2号是卢俊义。反过来,通过每个人的姓名,也能找出他对应的编号。武松是多少号?14号。李逵呢?22号。 +比如水泊梁山的108个好汉(里面分明也有女的,难道女汉子是从这里来的吗?),就是一个“有序排列”的序列。从老大宋江一直排到第108位金毛犬段景住。在这个序列中,每个人有编号,编号和每个人一一对应。1号是宋江,2号是卢俊义。反过来,通过每个人的姓名,也能找出他对应的编号。武松是多少号?14号。李逵呢?22号。 在python中,给这些编号取了一个文雅的名字,叫做**索引**(别的编程语言也这么称呼,不是python独有的。)。 From da841f2a0b08fd75ac5b1f8ec00ae65a7856fc6c Mon Sep 17 00:00:00 2001 From: qiwsir Date: Thu, 7 May 2015 10:08:35 +0800 Subject: [PATCH 036/417] distpackages --- 228.md | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.md | 1 + 2 files changed, 160 insertions(+) create mode 100644 228.md diff --git a/228.md b/228.md new file mode 100644 index 0000000..a89b207 --- /dev/null +++ b/228.md @@ -0,0 +1,159 @@ +>你们要爱惜光阴,用智慧与外人交往。你们的言语要常常带着和气,好像用盐调和,就可知道怎样回答各人。(COLOSSIANS 4:5-6) + +#第三方库 + +标准库的内容已经非常多了,前面仅仅列举几个,但是python给编程者的支持还不仅仅在于标准库,它还有不可胜数的第三方库。因此,如果作为一个python编程者,即使你达到了master的水平,最好的还是要在做某个事情之前,在网上搜一下是否有标准库或者第三方库替你完成那件事。因为,伟大的艾萨克·牛顿爵士说过: + +>如果我比别人看得更远,那是因为我站在巨人的肩上。 + +编程,就要站在巨人的肩上。标准库和第三方库以及其提供者,就是巨人,我们本应当谦卑地向其学习,并应用其成果。 + +##安装第三方库 + +要是用第三方库,第一步就是要安装,在本地安装完毕,就能如同标准库一样使用了。其安装方法如下: + +**方法一:利用源码安装** + +在github.com网站可以下载第三方库的源码(或者其它途径),得到源码之后,在本地安装。 + +一般情况,得到的码格式大概都是 zip 、 tar.zip、 tar.bz2格式的压缩包。解压这些包,进入其文件夹,通常会看见一个 setup.py 的文件。如果是Linux或者Mac(我是用ubuntu,特别推荐哦),就在这里运行shell,执行命令: + + python setup.py install + +如果用的是windows,需要打开命令行模式,执行上述指令即可。 + +如此,就能把这个第三库安装到系统里。具体位置,要视操作系统和你当初安装python环境时设置的路径而定。默认条件下,windows是在`C:\Python2.7\Lib\site-packages`,Linux在`/usr/local/lib/python2.7/dist-packages`(这个只是参考,不同发行版会有差别,具体请读者根据自己的操作系统,自己找找),Mac在 `/Library/Python/2.7/site-packages`。 + +有安装就要有卸载,卸载所安装的库非常简单,只需要到相应系统的site-packages目录,直接删掉库文件即卸载。 + +**方法二:pip** + +用源码安装,不是我推荐的,我推荐的是用第三方库的管理工具安装。有一个网站,是专门用来存储第三方库的,所有在这个网站上的,都能用pip或者easy_install这种安装工具来安装。这个网站的地址:https://pypi.python.org/pypi + +首先,要安装pip(python官方推荐这个,我当然要顺势了,所以,就只介绍并且后面也只使用这个工具)。如果读者跟我一样,用的是ubuntu或者其它某种Linux,基本不用这个操作,在安装操作系统的时候已经默认把这个东西安装好了(这还不是用ubuntu的理由吗?)。如果因为什么原因,没有安装,可以使用如下方法: + +Debian and Ubuntu: + + sudo apt-get install python-pip + +Fedora and CentOS: + + sudo yum install python-pip + +当然,也可以这里下载文件[get-pip.py](https://bootstrap.pypa.io/get-pip.py),然后执行`python get-pip.py`来安装。这个方法也适用于windows。 + +pip安装好了。如果要安装第三方库,只需要执行`pip install XXXXXX`(XXXXXX代表第三方库的名字)即可。 + +当第三方库安装完毕,接下来的使用就如同前面标准库一样。 + +##举例:requests库 + +以requests模块为例,来说明第三方库的安装和使用。之所以选这个,是因为前面介绍了urllib和urllib2两个标准库的模块,与之有类似功能的第三方库中requests也是一个用于在程序中进行http协议下的get和post请求的模块,并且被网友说成“好用的要哭”。 + +**说明**:下面的内容是网友1world0x00提供,我仅做了适当编辑。 + +###安装 + + pip install requests + +安装好之后,在交互模式下: + + >>> import requests + >>> dir(requests) + ['ConnectionError', 'HTTPError', 'NullHandler', 'PreparedRequest', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__copyright__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__version__', 'adapters', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'delete', 'exceptions', 'get', 'head', 'hooks', 'logging', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'session', 'sessions', 'status_codes', 'structures', 'utils'] + +从上面的列表中可以看出,在http中常用到的get,cookies,post等都赫然在目。 + +###get请求 + + >>> r = requests.get("http://www.itdiffer.com") + +得到一个请求的实例,然后: + + >>> r.cookies + <[]> + +这个网站对客户端没有写任何cookies内容。换一个看看: + + >>> r = requests.get("http://www.1world0x00.com") + >>> r.cookies + <[Cookie(version=0, name='PHPSESSID', value='buqj70k7f9rrg51emsvatveda2', port=None, port_specified=False, domain='www.1world0x00.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]> + +原来这样呀。继续,还有别的属性可以看看。 + + >>> r.headers + {'x-powered-by': 'PHP/5.3.3', 'transfer-encoding': 'chunked', 'set-cookie': 'PHPSESSID=buqj70k7f9rrg51emsvatveda2; path=/', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'keep-alive': 'timeout=15, max=500', 'server': 'Apache/2.2.15 (CentOS)', 'connection': 'Keep-Alive', 'pragma': 'no-cache', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'date': 'Mon, 10 Nov 2014 01:39:03 GMT', 'content-type': 'text/html; charset=UTF-8', 'x-pingback': 'http://www.1world0x00.com/index.php/action/xmlrpc'} + + >>> r.encoding + 'UTF-8' + + >>> r.status_code + 200 + +下面这个比较长,是网页的内容,仅仅截取显示部分: + + >>> print r.text + + + + + + + 1world0x00sec + + + + + + + + ...... + +请求发出后,requests会基于http头部对相应的编码做出有根据的推测,当你访问r.text之时,requests会使用其推测的文本编码。你可以找出requests使用了什么编码,并且能够使用r.coding属性来改变它。 + + >>> r.content + '\xef\xbb\xbf\xef\xbb\xbf\n\n \n \n \n 1world0x00sec\n \n >> import requests + >>> payload = {"key1":"value1","key2":"value2"} + >>> r = requests.post("http://httpbin.org/post") + >>> r1 = requests.post("http://httpbin.org/post", data=payload) + +r没有加data的请求,看看效果: + +![](http://wxpictures.qiniudn.com/requets-post1.jpg) + +r1是加了data的请求,看效果: + +![](http://wxpictures.qiniudn.com/requets-post2.jpg) + +多了form项。喵。 + +###http头部 + + >>> r.headers['content-type'] + 'application/json' + +注意,在引号里面的内容,不区分大小写`'CONTENT-TYPE'`也可以。 + +还能够自定义头部: + + >>> r.headers['content-type'] = 'adad' + >>> r.headers['content-type'] + 'adad' + +注意,当定制头部的时候,如果需要定制的项目有很多,需要用到数据类型为字典。 + +网上有一个更为详细叙述有关requests模块的网页,可以参考:[http://requests-docs-cn.readthedocs.org/zh_CN/latest/index.html](http://requests-docs-cn.readthedocs.org/zh_CN/latest/index.html) + +------ + +[总目录](./index.md)   |   [上节:标准库(8)](./227.md)   |   [下节:存入文件](./229.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index 0f1f04b..670cf83 100644 --- a/index.md +++ b/index.md @@ -88,6 +88,7 @@ 7. [标准库(6)](./225.md)==>urllib模块、urllib2模块 8. [标准库(7)](./226.md)==>xml.etree.ElementTree模块:遍历查询、增删改查xml,应用实例 9. [标准库(8)](./227.md)==>json模块:dumps(),loads(),dump(),load(),自定义类型数据的json编码和解码 +10. [第三方库](./228.md)==>第三方库的模块安装方法,以requests模块为例说明 ##第柒章 保存数据 From 194d8e335a4010ee4e5a439e5732da8665ac6e80 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 8 May 2015 09:51:07 +0800 Subject: [PATCH 037/417] pickle,shelve --- 229.md | 205 + 2code/22901.dat | 7 + 2code/22901.db | Bin 0 -> 12288 bytes 2code/22902.dat | 10004 ++++++++++++++++++++++++++++++++++++++++++++++ 2code/22903.dat | Bin 0 -> 29774 bytes index.md | 3 + 6 files changed, 10219 insertions(+) create mode 100644 229.md create mode 100644 2code/22901.dat create mode 100644 2code/22901.db create mode 100644 2code/22902.dat create mode 100644 2code/22903.dat diff --git a/229.md b/229.md new file mode 100644 index 0000000..6189378 --- /dev/null +++ b/229.md @@ -0,0 +1,205 @@ +>要常常喜乐,不住地祷告,凡事谢恩,因为这是神在基督耶稣里向你们所定的旨意。不要消灭圣灵的感动,不要藐视先知的讲论。但要凡事察验,善美的要持守,各样的恶事要禁戒不作。(1 THESSALONIANS 5:16-22) + +#将数据存入文件 + +在[《文件(1)》](./126.md)和[《文件(2)》](./127.md)中,已经学习了如何读写文件。 + +如果在程序中,有数据要保存到磁盘中,放到某个文件中是一种不错的方法。但是,如果像以前那样存,未免有点凌乱,并且没有什么良好的存储格式,导致数据以后被读出来的时候遇到麻烦,特别是不能让另外的使用者很好地理解。不要忘记了,编程是一个合作的活。还有,存储的数据不一定都是类似字符串、整数那种基础类型的。 + +总而言之,需要将要存储的对象格式化(或者叫做序列化),才好存好取。这就有点类似集装箱的作用。 + +所以,要用到本讲中提供的方式。 + +##pickle + +pickle是标准库中的一个模块,还有跟它完全一样的叫做cpickle,两者的区别就是后者更快。所以,下面操作中,不管是用`import pickle`,还是用`import cpickle as pickle`,在功能上都是一样的。 + + >>> import pickle + >>> integers = [1, 2, 3, 4, 5] + >>> f = open("22901.dat", "wb") + >>> pickle.dump(integers, f) + >>> f.close() + +用`pickle.dump(integers, f)`将数据integers保存到了文件22901.dat中。如果你要打开这个文件,看里面的内容,可能有点失望,但是,它对计算机是友好的。这个步骤,可以称之为将对象序列化。用到的方法是: + +`pickle.dump(obj,file[,protocol])` + +- obj:序列化对象,上面的例子中是一个列表,它是基本类型,也可以序列化自己定义的类型。 +- file:一般情况下是要写入的文件。更广泛地可以理解为为拥有write()方法的对象,并且能接受字符串为为参数,所以,它还可以是一个StringIO对象,或者其它自定义满足条件的对象。 +- protocol:可选项。默认为False(或者说0),是以ASCII格式保存对象;如果设置为1或者True,则以压缩的二进制格式保存对象。 + +下面换一种数据格式,并且做对比: + + >>> import pickle + >>> d = {} + >>> integers = range(9999) + >>> d["i"] = integers #下面将这个dict格式的对象存入文件 + + >>> f = open("22902.dat", "wb") + >>> pickle.dump(d, f) #文件中以ascii格式保存数据 + >>> f.close() + + >>> f = open("22903.dat", "wb") + >>> pickle.dump(d, f, True) #文件中以二进制格式保存数据 + >>> f.close() + + >>> import os + >>> s1 = os.stat("22902.dat").st_size #得到两个文件的大小 + >>> s2 = os.stat("22903.dat").st_size + + >>> print "%d, %d, %.2f%%" % (s1, s2, (s2+0.0)/s1*100) + 68903, 29774, 43.21% + +比较结果发现,以二进制方式保存的文件比以ascii格式保存的文件小很多,前者约是后者的43%。 + +所以,在序列化的时候,特别是面对较大对象时,建议将dump()的参数True设置上,虽然现在存储设备的价格便宜,但是能省还是省点比较好。 + +存入文件,仅是一个目标,还有另外一个目标,就是要读出来,也称之为反序列化。 + + >>> integers = pickle.load(open("22901.dat", "rb")) + >>> print integers + [1, 2, 3, 4, 5] + +就是前面存入的那个列表。再看看被以二进制存入的那个文件: + + >>> f = open("22903.dat", "rb") + >>> d = pickle.load(f) + >>> print d + {'i': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, .... #省略后面的数字} + >>> f.close() + +还是有自己定义数据类型的需要,这种类型是否可以用上述方式存入文件并读出来呢?看下面的例子: + + >>> import cPickle as pickle #cPickle更快 + >>> import StringIO #标准库中的一个模块,跟file功能类似,只不过是在内存中操作“文件” + + >>> class Book(object): #自定义一种类型 + ... def __init__(self,name): + ... self.name = name + ... def my_book(self): + ... print "my book is: ", self.name + ... + + >>> pybook = Book("") + >>> pybook.my_book() + my book is: + + >>> file = StringIO.StringIO() + >>> pickle.dump(pybook, file, 1) + >>> print file.getvalue() #查看“文件”内容 + ccopy_reg + _reconstructor + q(c__main__ + Book + qc__builtin__ + object + qNtRq}qUnameqUsb. + + >>> pickle.dump(pybook, file) #换一种方式,再看内容,可以比较一下 + >>> print file.getvalue() #视觉上,两者就有很大差异 + ccopy_reg + _reconstructor + q(c__main__ + Book + qc__builtin__ + object + qNtRq}qUnameqUsb.ccopy_reg + _reconstructor + p1 + (c__main__ + Book + p2 + c__builtin__ + object + p3 + NtRp4 + (dp5 + S'name' + p6 + S'' + p7 + sb. + +如果要从文件中读出来: + + >>> file.seek(0) #找到对应类型 + >>> pybook2 = pickle.load(file) + >>> pybook2.my_book() + my book is: + >>> file.close() + +##shelve + +pickle模块已经表现出它足够好的一面了。不过,由于数据的复杂性,pickle只能完成一部分工作,在另外更复杂的情况下,它就稍显麻烦了。于是,又有了shelve。 + +shelve模块也是标准库中的。先看一下基本操作:写入和读取 + + >>> import shelve + >>> s = shelve.open("22901.db") + >>> s["name"] = "www.itdiffer.com" + >>> s["lang"] = "python" + >>> s["pages"] = 1000 + >>> s["contents"] = {"first":"base knowledge","second":"day day up"} + >>> s.close() + +以上完成了数据写入的过程。其实,这更接近数据库的样式了。下面是读取。 + + >>> s = shelve.open("22901.db") + >>> name = s["name"] + >>> print name + www.itdiffer.com + >>> contents = s["contents"] + >>> print contents + {'second': 'day day up', 'first': 'base knowledge'} + +当然,也可以用for语句来读: + + >>> for k in s: + ... print k, s[k] + ... + contents {'second': 'day day up', 'first': 'base knowledge'} + lang python + pages 1000 + name www.itdiffer.com + +不管是写,还是读,都似乎要简化了。所建立的对象s,就如同字典一样,可称之为类字典对象。所以,可以如同操作字典那样来操作它。 + +但是,要小心坑: + + >>> f = shelve.open("22901.db") + >>> f["author"] + ['qiwsir'] + >>> f["author"].append("Hetz") #试图增加一个 + >>> f["author"] #坑就在这里 + ['qiwsir'] + >>> f.close() + +当试图修改一个已有键的值时,没有报错,但是并没有修改成功。要填平这个坑,需要这样做: + + >>> f = shelve.open("22901.db", writeback=True) #多一个参数True + >>> f["author"].append("Hetz") + >>> f["author"] #没有坑了 + ['qiwsir', 'Hetz'] + >>> f.close() + +还用for循环一下: + + >>> f = shelve.open("22901.db") + >>> for k,v in f.items(): + ... print k,": ",v + ... + contents : {'second': 'day day up', 'first': 'base knowledge'} + lang : python + pages : 1000 + author : ['qiwsir', 'Hetz'] + name : www.itdiffer.com + +shelve更像数据库了。 + +不过,它还不是真正的数据库。真正的数据库在后面。 + +------ + +[总目录](./index.md)   |   [上节:第三方库](./228.md)   |   [下节:mysql数据库](./230.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/22901.dat b/2code/22901.dat new file mode 100644 index 0000000..f521265 --- /dev/null +++ b/2code/22901.dat @@ -0,0 +1,7 @@ +(lp0 +I1 +aI2 +aI3 +aI4 +aI5 +a. \ No newline at end of file diff --git a/2code/22901.db b/2code/22901.db new file mode 100644 index 0000000000000000000000000000000000000000..0fe8ffb581b0720843150b7fc9823c3c2b25305d GIT binary patch literal 12288 zcmeI%u};G<5C-5gLKOrdv#>CAOQ$Gp;T>Skj$|4qjcA=Tb`_P07wE`iaVDw+lo6PIOBbK-6f62RJ48f+!w3b+acud7XrrCJJZoMZaLgVruU~fB zmfvHwPg@~+SdLGBs;~N(ApijgKmY;|fB*y_009U<00I#BKY{OO^bRd0?Y_!8c`I+^ zmE;u$1Rwwb2tWV=5P$##AOHafKmY>2B_K}vaU2Jcs8p`4NWyC2#-#~^s?WuVGP&rb zoF}2xqtc|@81N!hi>{A(#f4#DlQ1i4>v(a<-7{r%_uQ1tM5npt;!$8D!LK`Qob{jX z&;OtQ^Ka5Upa0+FvwV`AtquJDUn4;Q0uX=z1Rwwb2tWV=5P$##An->5d_B-KO;otF v$TD3=qjJiJdw)@2)KrV!r)|=< zX}h$2+9B;x3qiOBkh^?N_(e$(!OcGw0}Av9heSE2d6{Qq3N)6cse2- znT|?Fr(@Ew>9}-!Iw75yPD&@IQ_`vFv~+qpBb}MfN@u5Y(z)rpbbh)ZU6?LP7pF_o zrRlPCdAcH9nXXD#r)$!+>AG}%x*^?|Zb~<&ThguRwsd>CBi)(qN_VGw(!J@v^qKV8 zbbopvJ(wO!52r`c=hElXqv^5qh4jVrczPmzDSbJ8C4DtLnVw2dr)SdF($~|o>ACcL zdLexyeKUP4eLKCFUP|9d-%a03-%meCKTJPLKTbbMKTSVNKTp3%zf8YMzfLcwSJH3N zZ`1G6@6#XBAJePpwe+X-=k$7dBfXj4N^hrk(!1%s^q2J4^tbf)^pEt<^nUsveV9H< z|4RQ(|4IK%AE!^!|I(*q5D)}J0ZBj>Py|!~O+Xhg1WW--z!q=>TmetO7YGDGfk+@0 zNCYwpWD>|MkVPP?KsJHw0yzY73gi;VEs#ebuRuP5`~n383JMewC@fG!pr}AGf#L!s z1WF2&5-2TDMxd-fIf3#56$B~@R1&BxP(`4sKsABt0yP9`3e*y)El@|Gu0TD3`T`9E z8VWQLXe`h~ps7GA&`bb<<^nAQS_-rhXf4o2psheVf%XC&1Ud?I66h?@MWCxdH-YW~ zJp_6R^b+VT&_|%JKtF;00s{mF3Jek$EHFf1sK79R;Q}KBMhc7)7%ebHV64D6f$;(p z1SSeh5|}J7MPRDHG=b>?GX!P|%o3O_Fh^jnz&wHZ0t*Bd3M>*>EU-jislYOU=M{5ut#98z&?Rz1fCVx zFK|HMpui!4!vaSHo)dUp;Hbbcffoc`6gVz$Lf|EVmjzxCcvaw}z$t;#0%rtX6L?+V ztiU;e^8yzH-Vk_G;4Oi-1uhC)5_m`8U4i!m-WT{l;6s6r1U?q{MBr0_&jdaf_(I@I zfv*I<7Pu^MMc^BOZw0;+_+H=#fgc5~3S1NTN#JLJ>jF0fZVKEIxGiu;;I6Nc5k({sSws<0MKlpz z#1Jt>ED>A85phL45nm(_2}L52SR@h2D3VDevq%<^tRmS&vWw&p$tjXcB)3Q&k-Q@L zMDmLi5Gg29NTjex5s{)I#YBpWln^N?Qc9$>NEwl`BIQKNi&PM)C{jtJvPcz?sv^}y zs*BVRsVP!Rq_#*Mk-8%FMCyw)5NRmVNTjhy6OpDOsYo*sM4F4V5NRpWN~E<&8qORzY!KNfvPopK$QF^UBHKi^ zi|i2DDY8psx5yrmy(0TWo)LLgWWUG(k%Jxhir^5rB5cyN&zQ_ZSha!(e{u23HS|Fq(mu+(h_AP z%1V@zC@)b#qM}44iOLdHB&teOlc+9HL!zccEs5F^btLLa)RU+$(Lkc1L?emD5=|tU zN~99aB#>w>(L$o7L@SBb5^W^fO0<(`FVR7wqeLf(&JtZDx=M7D=q}MiqNhYJiQW=@ zB>GD9ljtuoKw_Z8Ac?^eLnMYu43iixF+yUb#3+f;5@RIBN{o{jFEK%4qQoSL$r4i} zrb4Gcu(Sei4P<`l=w*EV~I~BK9%@P;&X{FB)*jRO5$sY%Mw>4 zzLEG=;ya1&C4P|jQR1q^HHn`jewMf{aYO1?n41!}ByLOGk+>^yPvRGeUnPE%_+8=; zi9aRoOFWQxDDg<*FNwb;{*m}s;<3aNiT@;?N@S1`WJDQBMwU@zR2fZ1moa2a8B4~N zab#Q>PsW!CWI~xpCYDKLGRkC<$t;saCaX*~nd~w-WOB;nlF2QTM<%aKKAHS71!M}! z6p|?{Q$(hyOfi|_G9_e6%9N5REmKCOtV}tX@-h`D44P+Y1G?Hm7(?q7JOe)h%2ASqEEo55Cw32Bp(?+JPOgowOG96?( z%5;+HEYn4%t4ueU?lL`Oddl>Y=`GVormsvtnf@{ZWCqF%k{K*BL}sYWFqz>pBVX zmia{HQ<=|XK9~7I=1ZBcWWJWUEOSNX8<}rqzLWW0<_DP{Wv*I1b4TW`%srW3WPX+TP3Cu*KV<%txi9lT=Aq0ZnZIQImib5KUzx`;Ph|d+c`B1Z zK~NACBn4SPQBV~$1zo{VFcmBXTftFq6+8uBAy5bvB86BXQOKx}Ng=aB7KN+|*%Y!X zP7OsL)8Eu|gAtrV6P-GX)fy zE3{B(snANHwL%+(whHYO+ADNW=%~<1p|e64g{}(S6uK+)Q0S@9OQE+yABDaO{S^8u z3{V)TFi2sr!Vra_3d0nJD~wPWsW3`mw89vLu?pi9#w$!vn5ZyGVY0#$g{cbD6s9Z8 zP?)JOOJTOc9EG_G^AzSQEKpdeut;IC!V-n03dJL)+=mK z*r>2cVY9*(g{=zP6t*kuP}r%kOJTRd9)-OM`xKs0cvfM*!U2VY3WpR9D;!aHPT_fl zqYB3qUQl>Z;kd#Hg_jgwR(M6>RfUrZrxZ>roKbj9;dOLU*Q9V4;4OA_*mf+g-;beQ}|rr3xzKgzEb#F;j+RNg>MwTRrpTf zdxakqepI-sa82PSg`X9!E8I}Hsc=i-w!$5Sy9)Odeo^>U;Wvff75-58Q{leC1BHhQ zj}-n=_*>y0g?|+uD?Cy7PvNOT1{Fa?RFPC<6-7l=(NuI5L&a3FRBRPT#Z~cCe3d{Y zREbn#l|&_@N+y-eDp^#rs$^5iu98C~r%EoB+$wog@~Y%h$*)pCrJzb7mBK1TREnw; zQz@=eLZzfiDV5SHWmL+llv63MQbDDnN+p%bDpgdfs#H^{u2Ms#rb;c9+A4Ka>Z;UJ zsjt#NrJ+hAmBuPfRGO-!D$P_-X|B>jrKL(MmDVb4RNAVvQ)#c#L8YTgCzZ}BT~xZN zbW`cB(nF=EN-ve(Dt%P?s`OLouQEVopvoYX!74*khN=ux8Ll!yWu(d|mC-6=RK}`| zQyH%^L1m)KB$df3Q&gs^OjDVzGDBsi$}E-HDsxoks?1ZFud+a8p~@na#VSiwmZ~gM zS+24|Wu?k0mDMV1RMx7jQ(3RFL1m-LCY8-9TU55HY*X2;vO{I3$}W}NDtlD+s_avF zM&((R{VE4k4yqhdIjnL-|et#U@? zHI>&@&Z?YKIj?d-(H$pHzNUxvp|U<)+FlmD?(JRPL(W zQ~5>ZSC!vXepmTJROk=pl2#t{%qclcqjL{gYF-~K=#srOt8k008YfRCYsxeJty2cERnHsY+W^2sR zn5!{QW4^`$jfEPEG!|*sHNm;~9--HTG*9&^V}ZNaL`^5sl|Gp4T|4aZKX{jTbeJ zYn;${N#kXWS2SMLIH_?;{fjk_B6G=90N7RvYWF19E)zNfx9Ye>|v2<)5N5|FibbOsaC)9~_Vx2@M zqfREB%sN?gvg%~h$*z+_C#Oy>o!mNkbn@!t)5)(>K&PNiA)UfHMRbbl6w@iLQ$nYt zPAQ$zI%Raq>Xg$duTw#%qE029$~skas_InJsjgE)r>0IVo!UBebn5EV)2Xl1K&PQj zBb~-NO>~;-q&m%X&}pvILZ_upE1lLlZFJh|w9{#?(?O@BPA8qtI$dU7iTuG2%O zr%o@O-a37B`s(!4>8~?DXQ0j?oxwUobcX5-(;2QaLT9ATD4o$dV|2#qjMEvfGeKvf z&Lo}5I#YC}>P*v_t}{btrp_##**bG{=IYGTnXj`zXQ9p_oy9s!be8HY(^;;wLT9DU zDxK9jYjoD?tkYSqvq5L0&L*ABI$LzM>TJ{5uCqgDr_L^&-8y@8_Ui1@c}C}1o&7oo zbPnnq(mAYiMCUo3=XH+i9MgG0=S7|4Iwy2q(s^0u6`fagPU@V}IjwU>=QW+zbbqmLFWyfH+A09d0XeA&Ly39bl%l@Pv?D|4|G1%`AFwuolkT=)%i^4bDb}AzSQ|j z=WCtII#+bQ(fL;AJDu-!e$e?*=c>*%ou71m*14{8L+7T>EuGsscXaOR+|&6*=U1KI zbbiO`Ag?-oqu%x)p@M*MCU)9r#cx71Ow4PGLQ`v1Jyt?&>q;289d?8x%1pYEaCexIqbnk_M#=N*k0hC~Hv8pu9l^gNg=~3@RH`F{o-#&7itL z4TG8nwG3(-)G?@QP|u*gK?8$^28|3F8#FO!YLFT%G3aa1&!E4-0E2-BgA4{63^5pLFw9`M z!3cwq2BQo{8;mg+YcS4Wyuk#6i3XDlCL2sKm})T1V7kE!gP8`i3}ze5F_>#G&tSg6 z0)vGHiwqVUEHPMWu*_h&!3u+w2CEEK8>}%{Yp~8>y}<^9jRup zgI5e*H8^Q-%HXuY8H3jhUN<;vaL(Yo!3Bdi4Bj+&%iwK;iw2hr-Z6OB;5~!)4L&gV z(BLD3j}1OC_|)JtgU=1VF!<8oD}%2ME*o4i_{QK{gYOK!H~7KeM}w;d*9?9#_}SpP z!3~3(2Dc1u8{9FtYjDrt7lU67elz&p;17d84elE}FnDP2$lx!7zYYE|_}AdE!4rf3 z44xWfFcC~d6Ujt2QA|`5%|tgbOiUBY#5QqETocd4HwjEalgK1CNlY@DWHQNYlEoye zNj8)0COJ%Un&dLcZIZ_%uSq_W{3ZoV3Yru$DQr^2q^LZBoaiu1P(U`X&ub8k#gRX>8KOq^U`2 z(#!;t<|ZvnTAH*nX>HQRq^(IillCSZOgfr$GU;s6#iXlAH@wMHvd3hv$v%^3OrAB_Z*suopvfVV!zM>e zo-=vgTGI_`3U6c1r-Z%NcOg=XG#N<e8~>n1l$ZkpUOxovXC?cvPBh(sutBOs$0~ssA*BlqP9gH zi@Fx|Eb3b{uxMz}$fB`D6N{!6sYNpjESg)iuxM$~%A&PJ8;iCU?JU|`bg<}X(aEB- zMHh>%7TqkmTlBE#Y0=A~w?!X|z83u~`dbXJ7-%ubVz9*!i=h_7EQVW*uo!7E%3`#| z7>ltM<1EHoOt6?}G09@G#T1LF7Sk-ITg% zi=`IJES6iWuvlra%3`&}8jH0S>nzq=Y_Qm9vB_ey#TJXL7TYYgTkNpdX|c;7v3Snnd5fbK$1Gm3c+ujx#R-d-EMB(y73LL-S1nFj zoU%A=amL~`i`OmATAZ^uZ*jrm4U0D|-m-Yx;-bYRi+3#EwRq3seTxq)KD7AA;$w?X zEIzgP%;Iy4FD$;a_{!pIi^~>QEWWY$*5W&h?=60?_|f93#WjncEPl4QZgIonro}Cb z+ZJ~$?poZl_{HK^i{C7MxA?>2PmB8&4=f&9JhJ%9;%|$8EdI54Z1Ke6KZ~ap8Ega_ z(MGb7Z4?{TMzhgv3>(wNvaxL(8`s9O@ofT|&?d5pZ4#S|HkoWP+hnoHYLm?-yG;(8 zoHn^^a@*vw$!n9(CcjMqn}RllYzo^Hu_u~}=g&St&M2AhpG zn`}1QY_ZvDv(09^%?_KLHoI(g+w8H~YqQVh8JlNq_S+n=IcRgp=CI8Xo9Aqvw>fHa z%;p7~7j2H)oUnPx=4G2#Y+kiFX>-cvw9Oft*KA(5Icsyy=Df`Xn>TFUw0X(tF$04snK8O4c1sn=G6mlr+P{g6ALotWq z4ka8)I+SuK?NG*{tV216@(vXoDmqkhsO(V1p{heQhw2VB9BMk$a;WW4$Dyu6J%{=Z z4ICOeG;(O{(8QssL+a4X0f*)eEgV`pv~p@dY)s>3vg=?*g-W;)DrnC&pfVXnhGhxrZ*92Pn(a#-xJ#9^t!GKb|3 zD;!ojta4cGu*PAn!#aoc4jUXcI&5;-?6AdQtHU;j?G8H}b~@~G*zK^#VXwnJhi4p~ zb=dE4z~P|7A&0{bM;xAWc;4Zt!!d^!9A0!d?r_54C5M+CUU7KU;iSVUhtm#c9A0yH z-QldmIfwHO7aZPjc+=r6hqoOrI$Uyi$KhRv_Z;4L_`u;qhmRaScKF2MQ-{wSK6m)S z;Y)|F9KLqA>~O{58;5TlzH|8A;RlBw9j-cDbNI>OXNT(!Hymy{+;X_>aL3`U!##&z z9Da59&Ea>4KOFvaxbN`5;i1DLhrb;DcKFBPUx&vIPaOVpcDd|$mrL;>Km$EM9T*|vtaH;50$)&PO6_=_m z)m*B()NrZkQp=^bOC6WGF7;gMyEJfV=+elgu}c$|rY@;VGZ$Q%yR>j=>C(!jwM!e9 zwl3{l+Pidc>FCnQrL#*Hm#!||T)MmTaOvsN%cZwVAD6x^{apIH3~(9fGRS4H%Mh2L zF2h`gyNqxd=`zY?w96Qmu`c6W#=A^#ndmafWwOf@m#Hq(T&BCsaGB{c%VoC99GAH+ z^IYb;EO1%qvdCqz%MzERF3Vh&yR2|o>9WdYwaXfpwJz&i*1K$Q+32##WwXl`m#r?_ zT(-OHaM|gy%VoFA9+$l?`&^!JdDdmW%K?{zE{9wWyBu+O&gFTRqb|o>UT}HQ<+#fU zmzP{#c6r6+RhN@4r(90EoN;;0<#m^{F6Ug%yIgR2!{tqvw_M(Kx#)7q2k~Ew#yxtyDs-!esTHL5*^oTrSkHjORM<$QV z9$7rHdSvs+?vcYIr$;W2+#Y#6@_OX+$nR0Wqo7A2kHQ{BJc@c0^C<37!lR@|DUZ?~ zWjxAyl=CR>QNg34M|rbjK0+8%X0>Uz}ksPEChqoGG5kH#KN zJeqo>9?d-PXztO%qoqeHkJcV-JlcA+^JwqU!K0%`Cy&k^T|Byabo1!$(Zi#sM=y`w z9(_Fedi3+??=iq*pvNGO!5%|AhI$P1816B`W2DC@kI^1uJjQyA^BC_j!DFJwB#+4+ zQ#_`6O!JuTF~eh~$1IQ89&c-`Zy$2pJl z9v3{`@OabXEswW7E_z(@c*o;ikM}&@_xQl$LywO66PRw@)6QygvDS^7|C< zDdiabCY3S3)r?F2HpQb*kPct8Un)|fyY3b9-r?pQTpSC{jeA@eT z@agE&$)~eV7oV;^-F&+H^ziBF)61u~PamJYKK*?9`wZ|I=rhP?u+I>mp+3WWhWm{0 z8R;|1XSB~4pRqpUe8&4s@R{f{$!D_96rZU+(|o4;%geAfGH@Y(3I$!D|A7N4y?+kCeB?C{y? zv&(0<&mNz>KKp#0@p;x~zs~`mgFc6R4*MMOdCuo~pQApOdBf*TpSOJ8_POYD$>$xPcYWUTdEe&)pAUUL z^7+{36Q56gKJ)q9=L?@NeZKPf+UK&*6`yZ>zV-Re=X;+Ye17z~>T}KKC!e2vuKV2Z zx#@Gu=eExspSwQye17ry)#o>#-+lh@`P1jV&jX)_K979<^7-56AD@4H9{W7;`OoL6 zPlf;?Kn#!qaGs2)%wpk_d=fZ73d0_q0T3#cE^AfRDDqkzT%O#+$*qyfzW z2xuPABA{hJtAN%4Z35Z`v^5>K&ODt0bK&R26PMP9?&D8XF#uj-T{3A`Udn1 z=pQg3U|_(YfWZMn0)_?*3m6_SB4A{|sDRM{V* z9xx+dX27g~*#UC`<_63Qm>;kpU}3fUGHv`@Z zcst-?z@>n90^SXHFW~)v4+1_6_$c7xfKLKG4frhJ^MEe`z6|&(;Ol_P0apUP3HUbP zyMXTlehBz6;A+6NfS&?>4!9n0Bj9Ght$^DBcLMGP+za?6;MaiP0)7wpBjC?~`vDIE z9tJ!L_$%P=fPVu14R{>zB;db*rvVv4gb*=A3XwyU5H&;#(L;<7GsFt9L!1yd#0&95 zf{-vI3W-CKkc=UjLNbSB3CS9gEhKwLj*y%oxk7S>CMPtB|ilE{9wR`6lGskncji5BVYF$B?Tb*Ft^@`8niz$c>PjA-6(qhujId z8*(q?mylmWehc|M2zeOtDCDn@zeD~B`8VWo$di!&LY{_Xh!7&g2q{92 zP$JX_EkchlBFqRY!j5nv+z2nij|d{dh$teCNFp*uWQxcfktHH)M7D_R5ji4qM&ydf z9g!y@Z$!R`{1F8r3Pu!)C>&8FqG&|1h~g0?B1%S-iYOgXCZcRaxrp)+6(TA|REnq^ zQ6-{kM74r zXdTfeqHRRGi1ra3B05HNis&5CC8BFYw}|c$JtBHW^or;m(I=vBM8Ams5d$IyMhuD= z95EzfXvDCH;SnPuMn;T^7#%StVr;~?i185ze|;}It!UW#}*;+2S3BThz~iZ~r{CgQb-*CWnGoQpUgaUtT3h&LnNig-KXV#KA0 zcOu@6crW7phz}w@jQA+xWQoZdlPxBDOpchGF}Y%L$K;908BOrg%(= zn36H2VoJx9i76XXE~b1;g_w#lm0~K#REen?Q!S=?OpTbDF|}f9$JB|b8&fZ)eoTXy zhB1v|8pkw=X&RHpG>ajoc}$C#mNBhjTF11BX&cinrhQC@n2s@>VmilkiRl{CEv9=+ zkC>h@y<&RD^oi*k(=Vof%z&7IF@s_T#|()X8Z#_rc+7~HkujrUM#qea85=V$W_-+q zn29lyVkXB-iJ2NREoOSmjF_1*vtnk)%!!#BGcRU-%z~JOF^ggr$1I6i8nY~BdCZEK zl`*SgR>!P~SsSx1W_`?tn2j-;Vm8NYiP;*nEoOVnj+mV>yJB|7?1|YMvoGeEm}g`5 z#~g?`7;`A*aLkdI=VG3ZIT~{;=7pFSV~)q1hmV=l*BiTNhx+nDcSzK{7K=Es<;G1p>#iupO_dd!WOn=!XyZpYk-xf^pY=9idX zV}6VIJ?4*?KV$C4JcxN1^C;%8n7?EGiTO9?amlLb-(U2^A75CR9qOoKPj9YC^Sy z>IpRxY9`c5sGU$Jp>9IGg!%~$5*j8nN@$$WB%x_Sn$RqPgysn?5?Us-N@$(XCZTOY zyM*=$9TGYwbV}%)&?TX3LbrtO2|W^eCiF_^ozN$tZ$iI>{s{vT1||$j7@RO9VQ9jz zgy9Jz5=JJBN*J9mCSh#CxP_UxN?4t+CSh&Dx`g!!8xl4qY)aUiuq9z@!nTC% z2|E&YChSVsovwy7pYXQJ;?RFi$lau5qIY~Np>}<5tJKO5mv9qmqZHIRD zYTLGL+qUn0e#JxU5^YMfEzzz-`w|^WbS%-SMCTG+N^~vJtwi?{JxcT}(W^x75`9Ya zEzz$;{}KaA3@kCI#NZM`N(?PAti^v8u%C z5^GAVEwQe|`Vt#TY%H;<#O4xPN^C8$t;F^cJ4);Lr_ytOK^;!w%}O7af0IoCkRRc zAqWIg5DFqeEKmY1Faj%Zf<%xCydV?gfg0}_l2;LRE zCwO1*f#5^IM}m(9p9nq`d?xr@@P*(@!B>K>1x*A^1>Xpo37QL92)-43C-`3QgP^6L zmEcFgPlBHXzX*O6{3iHa@Q2_}!C!*E1^)>C75pb?EodWXD`+QZFX$lXDCi{UEa)QW zD(EKYF6bfXDd;8WE$AcYE9fWaFBl*gC>SIdEEpmfDi|ghE*K#gDHtUfEf^yhD;Osj zFPI>hD3~OeESMsgDwrmiE|?*hDVQagEtn&iE0`ykFIXU0C|D#|ELb8~Dp)31E?6O0 zDOe>~Em$L1D_AF3FW4a1DA**}EZ8F0D%d92F4!U1DcB|0E!ZR2E7&L4FE}7LC^#fI zEI1-KDku|BHlSQU`G5)m6$2^-R1T;TP&J@hK=ptc0W||^1soGlJK)%W;{uKkI3b`E zAOeB_84w0U0dar|&;cgE2DpGEAPw*VSwJ381k?#QG2oXb zX24kiX9t`UP%q%zfb#;*54a%U!hnkcE)KXP;L?E00xl1@BH+q^s{*bLxF(=}K!bp5 z1Fj3WKH!Fc8v_WqDd6USTLNwkxGmuJfI9;247e-c?tps&?hUvv;QoLI0v-%_DB$6M zM*?@O40wfTjW8 z1T+h19?&A-+ko!^z7O~zpk+X-fFA>X3ivtTmw;abehc_L;E#Ym1O5v5JK&#ye*^vt zXdTcdplv|Afc60$0y+kC3g{frC7^3Sw}9>eJpy_L^a|)5&?lg8K)-}{?xlVGu{pX7eY1Cj?N4@n-DJR*5i@|fgt$rF->k|!lkNuHKGBY9TxoTQQDdC3cs z7bP!AUY5KfX)JkF@|xsz$s3Y4C2vXImb@c*SMr|ZeaQ!s4<#Q-K9+nU`Bd_mh8R`Q+Xd&v)ymXcPIA0hoq;Zm!!9(kEE}ppQOKJ zfMlR#kYuoAh-9c_m}IzQgk+>-lw`DIjAX22oMgOYf@Gp(l4P=Eie#!}nq<0UhGeE> zmSnbMj%2Q6o@Bmcfn=d%kz}!CiDao{nPj0n`FCWhh(Q@mt?nOk7Tc8pJcz}faIX$kmRuBh~%iGOi0;~av|kIDuh%FsT5K< zq)JHDkZK{-Lu!Q745<}zOi1mJV?&M$IX>iskWz>U2|{E@7!rlVAu2?Nm=GJ{LXwa) z#D`=dc}NjbC*;JClR{1oIVI%OkkdlyhMXR9M#z~VXN8;{a!yFSkaI)M3pqdJf{+VC zE(*Cg^izn?r61xi#dr zklRD<2)Q%lu8_M!?g_a!zsxq-n@EA8l_9G_R)?$!SsSu0WPQknkc}amLNl2EvWPsQh^P~BV#G-iCr6wTacabA z5p^R@k2oXZ%!soh&W<=IqF%(g5$8pmA8|p%g%KA;TpV#p#HA6JMO+?nMZ}d6S4CVM zaZN=1hz1eYMqC$heZ&nBH%1U~Q^d^?w?y0;aa+Xg5qCt~8F5#{-4XXh+#7LU#QhNu zL_8SrP{hL#k3>8g@mR#;5l=)kjCeBQsfec|o{4xi;<<=M5zj}w5bQXch5e#7_}FNBk1;Ys7C6zeoHL@n^(e5r0Sg z6Y+1ve-W)C+C;RCXcy5wqC-T-h)xlmBf3O%jp!E9J)%cM&xl?Ty(9WW^o{5j(LZ89 z#K4F_5rZR!L=24>7BM_xM8wF5Q4ymf#zc&b7#A@!GM6H_*(Tuk|x z3NaO9D#cWesS;B)rdmw(m>MxPV`{}56H`0p*qGyDj*mGZrW7M$f*2VS#zZl3jEd1Q zCdS6Nm?S2R@iAFU9#h2Bi8(Rmq?nUqPKh}+=Cqi)F{j6z5p!nDSutnFoD)+o=G>U` zV$P4bAm+lDi()R0xg_S&n9E`=kGUe|%9yKSu8z4TrhZI=m}_IMi@84LhL{^;h`A}| z=9pVzZjHGu=JuF7V(yH&E9UO_|8u`5=H8h5V(yQ5Am+iChhiR%c_il1n8#usk9i`d zVa$^;PsKbP^GwXMG0(*`ig`Zfg_sv(UW$1+=9QSnF|WqF7V~<{8!>OjycP3y%sVmf z#=IBve#{3kAI5wX^Kr~4F`veK7V~+`7cpPPd=>L`Op} z`5~rdOskk5V}6SHIp&v`Ut@lY`90>3m_K9wiupU{pO}AR{)=fH(e#HZd z2Ne$~9#%Y}cvSJ2;&H_jiiV0O6;COiRy?D4R`Hyok>Yv93yK#NFDYJDyrO8VcvbP5 z;&sIviZ>N+Dc)ARqj*>Gp5lGQ2Z|3BA1OXoe4_YN@tNXt#TSY%6<;a7Ry0vGReYmp zrf9Bcq4-wuo#K1N4~mwGR*D}LKPi4z{G#|(@tfjz#UF}46@MxIR{W#*SMi^swW5up zt)iWxy`qDnqoR|dv!aWltD>8tyP}7pr=pjlx1x`tucDu#zhZ!5pkk0>uwsZ}sA8C6 zxMGB2q+*m}v|@~6tYVyEykdf4qGFO_vSNy2s$!aAx?+Z6rec<2wqlNAu40~IzG8u5 zp<v6|yF$7@c|lr%yUXrw08M4DKmG+JXcR^v2@Ce?UNrpYyhrjF)B%}JV*HK%A! z)tsiOt2teBhUQGoS(>vo=VYu?ekt9eiJzUBkXhnkNxA8S6*e5(0O^SR~=&6k?5G+%3)Xqsxi(KORE z*R;@ltNBjzz2*l^OHC`ykD8w}KWl!`{Hpm)^SkB`&7YdTG=FRU(fq6VPt#h{M$=Z) zPSak~LDNywNz+-=MblN&P19Y|L(@~!OVeA^N7Gl+Pt#vBKr>J?NHbV7L^D(~Ofy_F zLNih`N;6tBMl)73PBUIJK{HV^Ni$h9MKe`1O*36HLo-t|OEX(DM>AJ5PcvV$K(kP@ zNV8b8M6*=0OtW0GLbFn{O0!zCMzdD4PP1OKL9#wY)}SmFa~RIhQyE>ydg8>hQd(CaH8QP!^wtI45u1S zGt@PlZaBkmrr|8Z*@klr^$h14&NG~ExWI6s;UdGuhD!{W8ZI+jZn(m5rQs^W)rM;f z^$iUS*BY)fTyMC+aH9dkO@^Bdw-|0U+-A7laEIYe!(E2E4fh!CHQZ;o-|&FpLBm6a zhYgPy9yL5>c--)Wp`qbP!&8Q*4bK>!H9Ti%WO&~2g5gEOONN&XuNWE|UNyXCc-`=Z z;Z4I^hPMsx7~VC!XL#T6f#E~LM~06LpBO$hd}jFE@P*+^!&io{4NVM94c{1=8JZhf z7``=pXZYUmgQ2CNmElLjPllfjzZiZs{AT#w@Q2|~!(WEK4gVPaHT-92ZD?a?YiMU^ zZ|Gp?Xy|0YUpO@Zs=j?Y3OC>ZRlg@Yv^a_Zx~=0Xc%M|Y#3q~Y8Yl1ZWv)0 zX&7Y~Z5U%1YZzx3Z#YA9nVYbj?bZ>eCZXsKkWY^h?YYN=+aZmD6ZX{lv7#!}mI ztmQb%@s<-TC5x~G7HJ7BktMb$i?$exwKz*+NiE)zS#nEZsbe|Oa+2j_%PE#qEvH%P zT28l|VL8)smgQ{AIhJ~sb1mmt&bM4(xzKWv<$B8vmK!ZtZnE5Lxy5p;tmQdNBg^xa7c4JYUb4JwdBxJ$@~Y)E%j=dm zEN@!gvb=41$MUY_J}%+lP_ z!t$-xUezN>*`Ni_9?HO-C)qF^<}f zV;#pij(42kC^>{9a7ah!h#av)Ikdw#tiw4HN9yp7%#k|^M;*tBj*}cGJ5F(&>Nw3& z*KxYz49A&{vm9qT&T-Upoa;ExalYdM$AylI92Yw-aa`)S%yGHn3dfa>s~lH5u5r|N zG;mz&xXy9C;|9l#4jeZ*Zg$+_xYco+<95d#jyoN9Iqr7c=xo zJmPrN@tEUr#}kf*jwc;YIi7Yr<9OEboTHKBdB+Qm7acD-UUt0VXzX~^@tWgx#~Y3} z9d9|_cD&#lK6ZTK_|);4<8#LsjxQZwIlgu@aWr*&<7nn+?r7oo z*72R=d&dusmX21AA00nAes=ug_|@^7<9Ej&jz1lLIsSJ1@ zgQKIPlcTevi=(Tfo1?pmt(hMk7KW6 zpJTt{fa9R!kmIo9h~ucEOhVa&atY-VDkM})sFYASp-Mv4glY-Z6KW*XOsJJ`OhWC1 zV-t=`I6mQogi?Y?2ohvMm=Gnz2`WJ+m;{^P5|V^8!6#%1c|ws;C*j0|lM+r&I3?lK zgwqo0CY+vdM#7m1XC<7Sa85$KgmV+lOE^E_f`khbE=ssK;gW<)6D~`*JmHFjD-*6t zxH{pQg!%~$60S|SF5&uw8xn3zAmOHjn-gwHxHaLngxeGDNVqfMu7tZ2?n$^e;l70X z6COx-FyWzuhZ7!2cr@X$gvS$}NNAYwWWrMkPbWN+@NB|!35^n-Pk15W#e|me{i39lu*p72J(n+b0vyq)k)!n+CYCA^>TLBfX#A0>R8@JYg_37;i=p72G&mkD1b ze4WrFp=rW53C$9kC$vcTHsQO3?-PDVXqnI|;m3rZ5`IqjCE?eE-x7XL_#@%ZgufF0 zPWUI`--Q1XS|_wgXq(V3p?yM!gpLWF5;`YzN$8r;EunitkA$8Hy%KsS^hxNO&@Z8X z!hnQ<34;;_Ck#m#nlLP3c*2N;kqM&`MkkC(7@IIIVSK`bgoz205+)~1Ntl{2En#}X zjD(p9vl3<}%t@G=FfU<#!h(c_35yaICoD-=ny@TkdBTc>l?kg7Rwt}USevjeVSU1e zgpCQC5;iAnN!XgOEn$1Yj)a{FyApOM>`B<0urFbM!hwW?35OC6CmcyQnouUCY)ZM5 z@+lQkDyCFQshmrqnN}A$RvXnffNU4)@V#-M=C#Rf}a%#$HDRom$PdOvy%#^cI&Q3WerC!Rp zDd(k}pK?LUg((-MT%2-A%B3lnrCgqJMaq>aSEXE?a!pG8lm;o+rd*eDeaa0fH>Qws zQ_9ULx1`*fa$CynDR-pYnQ~Xk-6{8^+?#S=%Ka%1q&%4NP|Cw8kEA@B@>t5_DNm#{ zOnEZpsg$Qvo=JH&<++qbDbJ_8kn&>6ODQj>ypqy5<<*qeQeIDaBjwGMw^H6tc_-!F zl=o8JPx&C_!<3IwK2G^0<@@L9lDSxN@lk#uMe<`g~+N88iX_wMIr9(=` zlujv~Q@W&dP3e}>J*7uV&y-#%y;J(6^iAoP(m!QD%D|LCDT7mnqzp|NmNGnLM9RpN zQ7NNS#-xl*8J99XWkSltlu0R*Q>LU$O_`Q5J!MA9%#>Lvvs31z%uSh>GCyTO%EFXI zDT`B`mF1vOncO%E6RFDTh;zq#R8t<00;Hl`T7V zN-0ZoBT^4#sY$8)deKF|H0 z2RsjY9`ZcwdBpRm=P}RYo+msFJx_X`@;vQ%#`CP_IZq?c^PU$xFM3|`yzF_!)7bN> z=QYpko;N&idfxK9?Rm%ZuID|^`<@RxA9_CWeC+we^Qq@E&*z>mJYRag@_g-S;%Vyn z#?#Ex+|$DIt>-(>_nsd-Ej_I~KYD)h{OtL~^Q-4K&+nc;Jb!xr^8D@j$Mdh}KTm5< z8&6wLJ5PI02Tw;&Cr@Wj7f)ADH&1s@4^K}|FHdhzA5ULTKTm(p0M9_rAkSdW5YJH0 zFwbz$2+v5*D9>om7|&SGIL~;`1kXgzB+q2e6wg%8G|zO;49`r@EYEDu9M4?OJkNa3 z0?$IvBF|#a63djEplg&dNADkpH)PzHLB>rPH)q_EacjnH8MkNLk#T3nT^V<0 z+>>!{#(f$0XFQPcV8%lk4`)1*@o2_l8INZ?kY$&9Bmp3ZnC!jxH#6SKcst{rjCV8M%XmNIgNzR|KFatwDzTSoVc9vM9|dS&#^ z=#$YmqhChGJQtj<`I zu{L8}#`=s685=V;Wo*valCd>oTgLW`9T___c4h3&*psn0V_(Mpi~|`5GY(}O&Nz~B zG^0#T*_?7Y<#Q_JRLrTAQ#q$fPSu=hIn{G&|bd=Y*V6j>rje zWKNh9<-|EEN9ULvo8xkloHWPhWI1_Gky9t<#GI3IPR=F~ z$oV$syPWTHe#mK=(<o;kg8dgt`X>6_Cpr+?0XoPjxmat7xN$r+k6 zEN6Jmh@6o*qjE;)jL8|BGcIR*&V-zaIg@fG=S<0&nlmkDdd`fTnK`p^X6MYwnVT~& zXMWCtoP{}yau(+-$yu7SEN6Mniky`>t8!N7tjSrMvo2?S&W47nEQku?0#%?3Oo1(M1xZ0#;0v;X zyr3wkQ*dIzNd+etoKkRV!D$6`3r;UMqu|VfvkJ~GIH#aq!MO$J6`WsiLBWLu7ZqGw za7n?X1(y|EUT{Uhl?7K7TwQQYLH&XT1=ki_S8#p74FxwAP;gVh%>}m<+*)v3!R-Zi z6x>;GSHax{_Y~Y)a9_dw1rHQFSnyE6!v&8NJX-Kr!Q%x_6f`V&vf!zLrwg7bc(&lV zf<^_;7rapLV!=xVFBiO0(752$g4YUOFLTku`M_XR%`v@B><@MFPG1wR-3 zQt)fRZw0>>{88{{!CwV`7yMK3Z^3^Btqa-|v@K{?(7vEULC1nl1)U4J6m%`fFuq_y z!Nh_|1(OS=6ih9cRxrI_M#0R2Sp~BT<`m2=m{%~rU_rscf<*<33ziftEm&5tykJGa z%7Rq|s|(f?tSwkqu)bhJ!N!731)B@D6l^WnR;6TB_ zfpickle模块,shelve模块 + + #第叁季 实战 ##第捌章 用Tornado做网站 From b4eaac963238c965ec73befcfcc2432c0a773e73 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 8 May 2015 10:05:23 +0800 Subject: [PATCH 038/417] shelve,pickle --- 229.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/229.md b/229.md index 6189378..60abc53 100644 --- a/229.md +++ b/229.md @@ -86,7 +86,7 @@ pickle是标准库中的一个模块,还有跟它完全一样的叫做cpickle >>> file = StringIO.StringIO() >>> pickle.dump(pybook, file, 1) - >>> print file.getvalue() #查看“文件”内容 + >>> print file.getvalue() #查看“文件”内容,注意下面不是乱码 ccopy_reg _reconstructor q(c__main__ From d2a2e0152a6a74eb95632d84a36c839c331f4345 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 8 May 2015 11:46:43 +0800 Subject: [PATCH 039/417] correct --- 122.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/122.md b/122.md index b4d0d76..6f17703 100644 --- a/122.md +++ b/122.md @@ -2,7 +2,7 @@ #语句(2) -所谓条件语句,故名思,就是依据某个条件,满足这个条件后执行下面的内容。 +所谓条件语句,顾名思义,就是依据某个条件,满足这个条件后执行下面的内容。 ##if From e13470d5277965313f43a14563a97d8a82fc6cf9 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 8 May 2015 11:47:11 +0800 Subject: [PATCH 040/417] pickle, shelf --- 229.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/229.md b/229.md index 60abc53..5ece390 100644 --- a/229.md +++ b/229.md @@ -200,6 +200,6 @@ shelve更像数据库了。 ------ -[总目录](./index.md)   |   [上节:第三方库](./228.md)   |   [下节:mysql数据库](./230.md) +[总目录](./index.md)   |   [上节:第三方库](./228.md)   |   [下节:mysql数据库(1)](./230.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file From 1a2266345c1d32bf0dcfee7ed15f5e680cbd4aca Mon Sep 17 00:00:00 2001 From: qiwsir Date: Fri, 8 May 2015 11:48:33 +0800 Subject: [PATCH 041/417] mysql 1 --- 230.md | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.md | 1 + 2 files changed, 233 insertions(+) create mode 100644 230.md diff --git a/230.md b/230.md new file mode 100644 index 0000000..4e5341c --- /dev/null +++ b/230.md @@ -0,0 +1,232 @@ +>我们在你们那里的时候,曾吩咐你们说,若有人不肯作工,就不可吃饭。因我们听说,在你们中间有人不按规矩而行,什么工都不作,反倒专管闲事。我们靠主耶稣基督,吩咐、劝解这样的人,要安静作工,吃自己的饭。(2 THESSALONIANS 3:10-12) + +##mysql数据库(1) + +尽管用文件形式将数据保存到磁盘,已经是一种不错的方式。但是,人们还是发明了更具有格式化特点,并且写入和读取更快速便捷的东西——数据库(如果阅读港台的资料,它们称之为“资料库”)。维基百科对数据库有比较详细的说明: + +>数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。 + +到目前为止,地球上有三种类型的数据: + +- 关系型数据库:MySQL、Microsoft Access、SQL Server、Oracle、... +- 非关系型数据库:MongoDB、BigTable(Google)、... +- 键值数据库:Apache Cassandra(Facebook)、LevelDB(Google) ... + +在本教程中,我们主要介绍常用的开源的数据库,其中MySQL是典型代表。 + +###概况 + +MySQL是一个使用非常广泛的数据库,很多网站都是用它。关于这个数据库有很多传说。例如[维基百科上这么说:](http://zh.wikipedia.org/wiki/MySQL) + +>MySQL(官方发音为英语发音:/maɪ ˌɛskjuːˈɛl/ "My S-Q-L",[1],但也经常读作英语发音:/maɪ ˈsiːkwəl/ "My Sequel")原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被升阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购升阳微系统公司,MySQL成为Oracle旗下产品。 + +>MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。 + +>但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社区们对于Oracle是否还会持续支持MySQL社区版(MySQL之中唯一的免费版本)有所隐忧,因此原先一些使用MySQL的开源软件逐渐转向其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库。 + +不管怎么着,MySQL依然是一个不错的数据库选择,足够支持读者完成一个相当不小的网站。 + +###安装 + +你的电脑或许不会天生就有MySQL(是不是有的操作系统,在安装的时候就内置了呢?的确有,所以特别推荐Linux的某发行版),它本质上也是一个程序,若有必要,须安装。 + +我用ubuntu操作系统演示,因为我相信读者将来在真正的工程项目中,多数情况下是要操作Linux系统的服务器,并且,我酷爱用ubuntu。还有,本教程的目标是from beginner to master,不管是不是真的master,总要装得像,Linux能够给你撑门面。 + +第一步,在shell端运行如下命令: + + sudo apt-get install mysql-server + +运行完毕,就安装好了这个数据库。是不是很简单呢?当然,当然,还要进行配置。 + +第二步,配置MySQL + +安装之后,运行: + + service mysqld start + +启动mysql数据库。然后进行下面的操作,对其进行配置。 + +默认的MySQL安装之后根用户是没有密码的,注意,这里有一个名词“根用户”,其用户名是:root。运行: + + $mysql -u root + +在这里之所以用-u root是因为我现在是一般用户(firehare),如果不加-u root的话,mysql会以为是firehare在登录。 + +进入mysql之后,会看到>符号开头,这就是mysql的命令操作界面了。 + +下面设置Mysql中的root用户密码了,否则,Mysql服务无安全可言了。 + + mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "123456"; + +用123456做为root用户的密码,应该是非常愚蠢的,如果在真正的项目中,最好别这样做,要用大小写字母与数字混合的密码,且不少于8位。 + +以后如果在登录数据库,就可以用刚才设置的密码了。 + +###运行 + +安装之后,就要运行它,并操作这个数据库。 + + $ mysql -u root -p + Enter password: + +输入数据库的密码,之后出现: + + Welcome to the MySQL monitor. Commands end with ; or \g. + Your MySQL connection id is 373 + Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu) + + Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + + Oracle is a registered trademark of Oracle Corporation and/or its + affiliates. Other names may be trademarks of their respective + owners. + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + + mysql> + +看到这个界面内容,就说明你已经进入到数据里面了。接下来就可以对这个数据进行操作。例如: + + mysql> show databases; + +--------------------+ + | Database | + +--------------------+ + | information_schema | + | carstore | + | cutvideo | + | itdiffer | + | mysql | + | performance_schema | + | test | + +--------------------+ + +用这个命令,就列出了当前已经有的数据库。 + +对数据库的操作,除了用命令之外,还可以使用一些可视化工具。比如phpmyadmin就是不错的。 + +更多数据库操作的知识,这里就不介绍了,读者可以参考有关书籍。 + +MySQL数据库已经安装好,但是Python还不能操作它,还要继续安装python操作数据库的模块——python-MySQLdb + +###安装python-MySQLdb + +python-MySQLdb是一个接口程序,python通过它对mysql数据实现各种操作。 + +在编程中,会遇到很多类似的接口程序,通过接口程序对另外一个对象进行操作。接口程序就好比钥匙,如果要开锁,人直接用手指去捅,肯定是不行的,那么必须借助工具,插入到锁孔中,把锁打开,之后,门开了,就可以操作门里面的东西了。那么打开锁的工具就是接口程序。谁都知道,用对应的钥匙开锁是最好的,如果用别的工具(比如锤子),或许不便利(其实还分人,也就是人开锁的水平,如果是江洋大盗或者小毛贼什么的,擅长开锁,用别的工具也便利了),也就是接口程序不同,编码水平不同,都是考虑因素。 + +啰嗦这么多,一言蔽之,python-MySQLdb就是打开MySQL数据库的钥匙。 + +如果要源码安装,可以这里下载python-mysqldb:[https://pypi.python.org/pypi/MySQL-python/](https://pypi.python.org/pypi/MySQL-python/) + +下载之后就可以安装了。 + +ubuntu下可以这么做: + + sudo apt-get install build-essential python-dev libmysqlclient-dev + sudo apt-get install python-MySQLdb + +也可以用pip来安装: + + pip install mysql-python + +安装之后,在python交互模式下: + + >>> import MySQLdb + +如果不报错,恭喜你,已经安装好了。如果报错,恭喜你,可以借着错误信息提高自己的计算机水平了,请求助于google大神。 + +###连接数据库 + +要先找到老婆,才能谈如何养育自己的孩子,同理连接数据库之先要建立数据库。 + + $ mysql -u root -p + Enter password: + +进入到数据库操作界面: + + Welcome to the MySQL monitor. Commands end with ; or \g. + Your MySQL connection id is 373 + Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu) + + Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. + + Oracle is a registered trademark of Oracle Corporation and/or its + affiliates. Other names may be trademarks of their respective + owners. + + Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + + mysql> + +输入如下命令,建立一个数据库: + + mysql> create database qiwsirtest character set utf8; + Query OK, 1 row affected (0.00 sec) + +注意上面的指令,如果仅仅输入:create database qiwsirtest,也可以,但是,我在后面增加了character set utf8,意思是所建立的数据库qiwsirtest,编码是utf-8的,这样存入汉字就不是乱码了。 + +看到那一行提示:Query OK, 1 row affected (0.00 sec),就说明这个数据库已经建立好了,名字叫做:qiwsirtest + +数据库建立之后,就可以用python通过已经安装的mysqldb来连接这个名字叫做qiwsirtest的库了。 + + >>> import MySQLdb + >>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="qiwsirtest",port=3306,charset="utf8") + +逐个解释上述命令的含义: + +- host:等号的后面应该填写mysql数据库的地址,因为就数据库就在本机上(也称作本地),所以使用localhost,注意引号。如果在其它的服务器上,这里应该填写ip地址。一般中小型的网站,数据库和程序都是在同一台服务器(计算机)上,就使用localhost了。 +- user:登录数据库的用户名,这里一般填写"root",还是要注意引号。当然,如果读者命名了别的用户名,数据库管理者提供了专有用户名,就更改为相应用户。但是,不同用户的权限可能不同,所以,在程序中,如果要操作数据库,还要注意所拥有的权限。在这里用root,就放心了,什么权限都有啦。不过,这样做,在大型系统中是应该避免的。 +- passwd:上述user账户对应的登录mysql的密码。我在上面的例子中用的密码是"123123"。不要忘记引号。 +- db:就是刚刚通create命令建立的数据库,我建立的数据库名字是"qiwsirtest",还是要注意引号。看官如果建立的数据库名字不是这个,就写自己所建数据库名字。 +- port:一般情况,mysql的默认端口是3306,当mysql被安装到服务器之后,为了能够允许网络访问,服务器(计算机)要提供一个访问端口给它。 +- charset:这个设置,在很多教程中都不写,结果在真正进行数据存储的时候,发现有乱码。这里我将qiwsirtest这个数据库的编码设置为utf-8格式,这样就允许存入汉字而无乱码了。注意,在mysql设置中,utf-8写成utf8,没有中间的横线。但是在python文件开头和其它地方设置编码格式的时候,要写成utf-8。切记! + +注:connect中的host、user、passwd等可以不写,只有在写的时候按照host、user、passwd、db(可以不写)、port顺序写就可以,端口号port=3306还是不要省略的为好,如果没有db在port前面,直接写3306会报错. + +其实,关于connect的参数还不少,下面摘抄来自[mysqldb官方文档的内容](http://mysql-python.sourceforge.net/MySQLdb.html),把所有的参数都列出来,还有相关说明,请看官认真阅读。不过,上面几个是常用的,其它的看情况使用。 + +connect(parameters...) + +>Constructor for creating a connection to the database. Returns a Connection Object. Parameters are the same as for the MySQL C API. In addition, there are a few additional keywords that correspond to what you would pass mysql_options() before connecting. Note that some parameters must be specified as keyword arguments! The default value for each parameter is NULL or zero, as appropriate. Consult the MySQL documentation for more details. The important parameters are: + +- host: name of host to connect to. Default: use the local host via a UNIX socket (where applicable) +- user: user to authenticate as. Default: current effective user. +- passwd: password to authenticate with. Default: no password. +- db: database to use. Default: no default database. +- port: TCP port of MySQL server. Default: standard port (3306). +- unix_socket: location of UNIX socket. Default: use default location or TCP for remote hosts. +- conv: type conversion dictionary. Default: a copy of MySQLdb.converters.conversions +- compress: Enable protocol compression. Default: no compression. +- connect_timeout: Abort if connect is not completed within given number of seconds. Default: no timeout (?) +- named_pipe: Use a named pipe (Windows). Default: don't. +- init_command: Initial command to issue to server upon connection. Default: Nothing. +- read_default_file: MySQL configuration file to read; see the MySQL documentation for mysql_options(). +- read_default_group: Default group to read; see the MySQL documentation for mysql_options(). +- cursorclass: cursor class that cursor() uses, unless overridden. Default: MySQLdb.cursors.Cursor. This must be a keyword parameter. +- use_unicode: If True, CHAR and VARCHAR and TEXT columns are returned as Unicode strings, using the configured character set. It is best to set the default encoding in the server configuration, or client configuration (read with read_default_file). If you change the character set after connecting (MySQL-4.1 and later), you'll need to put the correct character set name in connection.charset. + +If False, text-like columns are returned as normal strings, but you can always write Unicode strings. + +This must be a keyword parameter. + +- charset: If present, the connection character set will be changed to this character set, if they are not equal. Support for changing the character set requires MySQL-4.1 and later server; if the server is too old, UnsupportedError will be raised. This option implies use_unicode=True, but you can override this with use_unicode=False, though you probably shouldn't. + +If not present, the default character set is used. + +This must be a keyword parameter. + +- sql_mode: If present, the session SQL mode will be set to the given string. For more information on sql_mode, see the MySQL documentation. Only available for 4.1 and newer servers. + +If not present, the session SQL mode will be unchanged. + +This must be a keyword parameter. + +- ssl: This parameter takes a dictionary or mapping, where the keys are parameter names used by the mysql_ssl_set MySQL C API call. If this is set, it initiates an SSL connection to the server; if there is no SSL support in the client, an exception is raised. This must be a keyword parameter. + +已经完成了数据库的连接。 + +------ + +[总目录](./index.md)   |   [上节:将数据存入文件](./229.md)   |   [下节:mysql数据库(2)](./231.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 diff --git a/index.md b/index.md index 8304f1c..0e0aade 100644 --- a/index.md +++ b/index.md @@ -93,6 +93,7 @@ ##第柒章 保存数据 1. [将数据存入文件](./229.md)==>pickle模块,shelve模块 +2. [MySQL数据库(1)](./230.md)==>MySQL概况,安装,python连接MySQL模块和方法 #第叁季 实战 From f93df73b74c42a4f990fc97716138a7f06c3111f Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sat, 9 May 2015 09:55:37 +0800 Subject: [PATCH 042/417] mysql2 --- 231.md | 334 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.md | 1 + 2 files changed, 335 insertions(+) create mode 100644 231.md diff --git a/231.md b/231.md new file mode 100644 index 0000000..7cbc6ea --- /dev/null +++ b/231.md @@ -0,0 +1,334 @@ +>"So do not worry about tomorrow, for tomorrow will bring worries of its own. Today's trouble is enought for today." (MATTHEW 7:34) + +#MySQL数据库(2) + +就数据库而言,连接之后就要对其操作。但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维基百科对数据库表的简要解释,要想详细了解,需要看官在找一些有关数据库的教程和书籍来看看。 + +>在关系数据库中,数据库表是一系列二维数组的集合,用来代表和储存数据对象之间的关系。它由纵向的列和横向的行组成,例如一个有关作者信息的名为 authors 的表中,每个列包含的是所有作者的某个特定类型的信息,比如“姓氏”,而每行则包含了某个特定作者的所有信息:姓、名、住址等等。 + +>对于特定的数据库表,列的数目一般事先固定,各列之间可以由列名来识别。而行的数目可以随时、动态变化,每行通常都可以根据某个(或某几个)列中的数据来识别,称为候选键。 + +我打算在qiwsirtest中建立一个存储用户名、用户密码、用户邮箱的表,其结构用二维表格表现如下: + +|username|password|email| +|--------|--------|-----| +|qiwsir|123123|qiwsir@gmail.com| + +特别说明,这里为了简化细节,突出重点,对密码不加密,直接明文保存,虽然这种方式是很不安全的。但是,有不少网站还都这么做的,这么做的目的是比较可恶的。就让我在这里,仅仅在这里可恶一次。 + +##数据库表 + +因为直接操作数据部分,不是本教重点,但是关联到后面的操作,为了让读者在阅读上连贯,也快速地说明建立数据库表并输入内容。 + + mysql> use qiwsirtest; + Database changed + mysql> show tables; + Empty set (0.00 sec) + +用`show tables`命令显示这个数据库中是否有数据表了。查询结果显示为空。 + +下面就用如下命令建立一个数据表,这个数据表的内容就是上面所说明的。 + + mysql> create table users(id int(2) not null primary key auto_increment,username varchar(40),password text,email text)default charset=utf8; + Query OK, 0 rows affected (0.12 sec) + +建立的这个数据表名称是:users,其中包含上述字段,可以用下面的方式看一看这个数据表的结构。 + + mysql> show tables; + +----------------------+ + | Tables_in_qiwsirtest | + +----------------------+ + | users | + +----------------------+ + 1 row in set (0.00 sec) + +查询显示,在qiwsirtest这个数据库中,已经有一个表,它的名字是:users。 + + mysql> desc users; + +----------+-------------+------+-----+---------+----------------+ + | Field | Type | Null | Key | Default | Extra | + +----------+-------------+------+-----+---------+----------------+ + | id | int(2) | NO | PRI | NULL | auto_increment | + | username | varchar(40) | YES | | NULL | | + | password | text | YES | | NULL | | + | email | text | YES | | NULL | | + +----------+-------------+------+-----+---------+----------------+ + 4 rows in set (0.00 sec) + +显示表users的结构: + +特别提醒:上述所有字段设置仅为演示,在实际开发中,要根据具体情况来确定字段的属性。 + +如此就得到了一个空表。可以查询看看: + + mysql> select * from users; + Empty set (0.01 sec) + +向里面插入点信息,就只插入一条吧。 + + mysql> insert into users(username,password,email) values("qiwsir","123123","qiwsir@gmail.com"); + Query OK, 1 row affected (0.05 sec) + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + +----+----------+----------+------------------+ + 1 row in set (0.00 sec) + +这样就得到了一个有内容的数据库表。 + +##python操作数据库 + +连接数据库,必须的。 + + >>> import MySQLdb + >>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="qiwsirtest",charset="utf8") + +Python建立了与数据的连接,其实是建立了一个`MySQLdb.connect()`的实例对象,或者泛泛地称之为连接对象,python就是通过连接对象和数据库对话。这个对象常用的方法有: + +- commit():如果数据库表进行了修改,提交保存当前的数据。当然,如果此用户没有权限就作罢了,什么也不会发生。 +- rollback():如果有权限,就取消当前的操作,否则报错。 +- cursor([cursorclass]):返回连接的游标对象。通过游标执行SQL查询并检查结果。游标比连接支持更多的方法,而且可能在程序中更好用。 +- close():关闭连接。此后,连接对象和游标都不再可用了。 + +Python和数据之间的连接建立起来之后,要操作数据库,就需要让python对数据库执行SQL语句。Python是通过游标执行SQL语句的。所以,连接建立之后,就要利用连接对象得到游标对象,方法如下: + + >>> cur = conn.cursor() + +此后,就可以利用游标对象的方法对数据库进行操作。那么还得了解游标对象的常用方法: + +|名称|描述| +|----|----| +|close()|关闭游标。之后游标不可用| +|execute(query[,args])|执行一条SQL语句,可以带参数| +|executemany(query, pseq)|对序列pseq中的每个参数执行sql语句| +|fetchone()|返回一条查询结果| +|fetchall()|返回所有查询结果| +|fetchmany([size])|返回size条结果| +|nextset()|移动到下一个结果| +|scroll(value,mode='relative')|移动游标到指定行,如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.| + +###插入 + +例如,要在数据表users中插入一条记录,使得:username="python",password="123456",email="python@gmail.com",这样做: + + >>> cur.execute("insert into users (username,password,email) values (%s,%s,%s)",("python","123456","python@gmail.com")) + 1L + +没有报错,并且返回一个"1L"结果,说明有一行记录操作成功。不妨用"mysql>"交互方式查看一下: + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + +----+----------+----------+------------------+ + 1 row in set (0.00 sec) + +咦,奇怪呀。怎么没有看到增加的那一条呢?哪里错了?可是上面也没有报错呀。 + +特别注意,通过"cur.execute()"对数据库进行操作之后,没有报错,完全正确,但是不等于数据就已经提交到数据库中了,还必须要用到"MySQLdb.connect"的一个属性:commit(),将数据提交上去,也就是进行了"cur.execute()"操作,要将数据提交,必须执行: + + >>> conn.commit() + +再到"mysql>"中运行"select * from users"试一试: + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + | 2 | python | 123456 | python@gmail.com | + +----+----------+----------+------------------+ + 2 rows in set (0.00 sec) + +果然如此。这就如同编写一个文本一样,将文字写到文本上,并不等于文字已经保留在文本文件中了,必须执行"CTRL-S"才能保存。也就是在通过python操作数据库的时候,以"execute()"执行各种sql语句之后,要让已经执行的效果保存,必须运行连接对象的"commit()"方法。 + +再尝试一下插入多条的那个命令"executemany(query,args)". + + >>> cur.executemany("insert into users (username,password,email) values (%s,%s,%s)",(("google","111222","g@gmail.com"),("facebook","222333","f@face.book"),("github","333444","git@hub.com"),("docker","444555","doc@ker.com"))) + 4L + >>> conn.commit() + +到"mysql>"里面看结果: + + mysql> select * from users; + +----+----------+----------+------------------+ + | id | username | password | email | + +----+----------+----------+------------------+ + | 1 | qiwsir | 123123 | qiwsir@gmail.com | + | 2 | python | 123456 | python@gmail.com | + | 3 | google | 111222 | g@gmail.com | + | 4 | facebook | 222333 | f@face.book | + | 5 | github | 333444 | git@hub.com | + | 6 | docker | 444555 | doc@ker.com | + +----+----------+----------+------------------+ + 6 rows in set (0.00 sec) + +成功插入了多条记录。在"executemany(query, pseq)"中,query还是一条sql语句,但是pseq这时候是一个tuple,这个tuple里面的元素也是tuple,每个tuple分别对应sql语句中的字段列表。这句话其实被执行多次。只不过执行过程不显示给我们看罢了。 + +除了插入命令,其它对数据操作的命了都可用类似上面的方式,比如删除、修改等。 + +###查询 + +如果要从数据库中查询数据,也用游标方法来操作了。 + + >>> cur.execute("select * from users") + 7L + +这说明从users表汇总查询出来了7条记录。但是,这似乎有点不友好,告诉我7条记录查出来了,但是在哪里呢,如果在'mysql>'下操作查询命令,一下就把7条记录列出来了。怎么显示python在这里的查询结果呢? + +要用到游标对象的fetchall()、fetchmany(size=None)、fetchone()、scroll(value, mode='relative')等方法。 + + >>> cur.execute("select * from users") + 7L + >>> lines = cur.fetchall() + +到这里,已经将查询到的记录赋值给变量lines了。如果要把它们显示出来,就要用到曾经学习过的循环语句了。 + + >>> for line in lines: + ... print line + ... + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + (2L, u'python', u'123456', u'python@gmail.com') + (3L, u'google', u'111222', u'g@gmail.com') + (4L, u'facebook', u'222333', u'f@face.book') + (5L, u'github', u'333444', u'git@hub.com') + (6L, u'docker', u'444555', u'doc@ker.com') + (7L, u'\u8001\u9f50', u'9988', u'qiwsir@gmail.com') + +很好。果然是逐条显示出来了。列位注意,第七条中的u'\\u8001\\u95f5',这里是汉字,只不过由于我的shell不能显示罢了,不必惊慌,不必搭理它。 + +只想查出第一条,可以吗?当然可以!看下面的: + + >>> cur.execute("select * from users where id=1") + 1L + >>> line_first = cur.fetchone() #只返回一条 + >>> print line_first + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + +为了对上述过程了解深入,做下面实验: + + >>> cur.execute("select * from users") + 7L + >>> print cur.fetchall() + ((1L, u'qiwsir', u'123123', u'qiwsir@gmail.com'), (2L, u'python', u'123456', u'python@gmail.com'), (3L, u'google', u'111222', u'g@gmail.com'), (4L, u'facebook', u'222333', u'f@face.book'), (5L, u'github', u'333444', u'git@hub.com'), (6L, u'docker', u'444555', u'doc@ker.com'), (7L, u'\u8001\u9f50', u'9988', u'qiwsir@gmail.com')) + +原来,用cur.execute()从数据库查询出来的东西,被“保存在了cur所能找到的某个地方”,要找出这些被保存的东西,需要用cur.fetchall()(或者fechone等),并且找出来之后,做为对象存在。从上面的实验探讨发现,被保存的对象是一个tuple中,里面的每个元素,都是一个一个的tuple。因此,用for循环就可以一个一个拿出来了。 + +接着看,还有神奇的呢。 + +接着上面的操作,再打印一遍 + + >>> print cur.fetchall() + () + +晕了!怎么什么是空?不是说做为对象已经存在了内存中了吗?难道这个内存中的对象是一次有效吗? + +不要着急。 + +通过游标找出来的对象,在读取的时候有一个特点,就是那个游标会移动。在第一次操作了print cur.fetchall()后,因为是将所有的都打印出来,游标就从第一条移动到最后一条。当print结束之后,游标已经在最后一条的后面了。接下来如果再次打印,就空了,最后一条后面没有东西了。 + +下面还要实验,检验上面所说: + + >>> cur.execute('select * from users') + 7L + >>> print cur.fetchone() + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + >>> print cur.fetchone() + (2L, u'python', u'123456', u'python@gmail.com') + >>> print cur.fetchone() + (3L, u'google', u'111222', u'g@gmail.com') + +这次我不一次全部打印出来了,而是一次打印一条,看官可以从结果中看出来,果然那个游标在一条一条向下移动呢。注意,我在这次实验中,是重新运行了查询语句。 + +那么,既然在操作存储在内存中的对象时候,游标会移动,能不能让游标向上移动,或者移动到指定位置呢?这就是那个scroll() + + >>> cur.scroll(1) + >>> print cur.fetchone() + (5L, u'github', u'333444', u'git@hub.com') + >>> cur.scroll(-2) + >>> print cur.fetchone() + (4L, u'facebook', u'222333', u'f@face.book') + +果然,这个函数能够移动游标,不过请仔细观察,上面的方式是让游标相对与当前位置向上或者向下移动。即: + +cur.scroll(n),或者,cur.scroll(n,"relative"):意思是相对当前位置向上或者向下移动,n为正数,表示向下(向前),n为负数,表示向上(向后) + +还有一种方式,可以实现“绝对”移动,不是“相对”移动:增加一个参数"absolute" + +特别提醒看官注意的是,在python中,序列对象是的顺序是从0开始的。 + + >>> cur.scroll(2,"absolute") #回到序号是2,但指向第三条 + >>> print cur.fetchone() #打印,果然是 + (3L, u'google', u'111222', u'g@gmail.com') + + >>> cur.scroll(1,"absolute") + >>> print cur.fetchone() + (2L, u'python', u'123456', u'python@gmail.com') + + >>> cur.scroll(0,"absolute") #回到序号是0,即指向tuple的第一条 + >>> print cur.fetchone() + (1L, u'qiwsir', u'123123', u'qiwsir@gmail.com') + +至此,已经熟悉了cur.fetchall()和cur.fetchone()以及cur.scroll()几个方法,还有另外一个,接这上边的操作,也就是游标在序号是1的位置,指向了tuple的第二条 + + >>> cur.fetchmany(3) + ((2L, u'python', u'123456', u'python@gmail.com'), (3L, u'google', u'111222', u'g@gmail.com'), (4L, u'facebook', u'222333', u'f@face.book')) + +上面这个操作,就是实现了从当前位置(游标指向tuple的序号为1的位置,即第二条记录)开始,含当前位置,向下列出3条记录。 + +读取数据,好像有点啰嗦呀。细细琢磨,还是有道理的。你觉得呢? + +不过,python总是能够为我们着想的,在连接对象的游标方法中提供了一个参数,可以实现将读取到的数据变成字典形式,这样就提供了另外一种读取方式了。 + + >>> cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor) + >>> cur.execute("select * from users") + 7L + >>> cur.fetchall() + ({'username': u'qiwsir', 'password': u'123123', 'id': 1L, 'email': u'qiwsir@gmail.com'}, {'username': u'mypython', 'password': u'123456', 'id': 2L, 'email': u'python@gmail.com'}, {'username': u'google', 'password': u'111222', 'id': 3L, 'email': u'g@gmail.com'}, {'username': u'facebook', 'password': u'222333', 'id': 4L, 'email': u'f@face.book'}, {'username': u'github', 'password': u'333444', 'id': 5L, 'email': u'git@hub.com'}, {'username': u'docker', 'password': u'444555', 'id': 6L, 'email': u'doc@ker.com'}, {'username': u'\u8001\u9f50', 'password': u'9988', 'id': 7L, 'email': u'qiwsir@gmail.com'}) + +这样,在元组里面的元素就是一个一个字典: + + >>> cur.scroll(0,"absolute") + >>> for line in cur.fetchall(): + ... print line["username"] + ... + qiwsir + mypython + google + facebook + github + docker + 老齐 + +根据字典对象的特点来读取了“键-值”。 + +###更新数据 + +经过前面的操作,这个就比较简单了,不过需要提醒的是,如果更新完毕,和插入数据一样,都需要commit()来提交保存。 + + >>> cur.execute("update users set username=%s where id=2",("mypython")) + 1L + >>> cur.execute("select * from users where id=2") + 1L + >>> cur.fetchone() + (2L, u'mypython', u'123456', u'python@gmail.com') + +从操作中看出来了,已经将数据库中第二条的用户名修改为mypython了,用的就是update语句。 + +不过,要真的实现在数据库中更新,还要运行: + + >>> conn.commit() + +这就大事完吉了。 + +python来操作mysql数据,基本方法介绍完毕。 + +------ + +[总目录](./index.md)   |   [上节:mysql数据库(1)](./230.md)   |   [下节:mongodb数据库](./232.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index 0e0aade..750c7bd 100644 --- a/index.md +++ b/index.md @@ -94,6 +94,7 @@ 1. [将数据存入文件](./229.md)==>pickle模块,shelve模块 2. [MySQL数据库(1)](./230.md)==>MySQL概况,安装,python连接MySQL模块和方法 +3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 #第叁季 实战 From 5d6e2e69b406ae03d0654b2ffc17dec5ae32f665 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sat, 9 May 2015 10:58:42 +0800 Subject: [PATCH 043/417] utf-8 --- 1code/chartoint.py | 16 +++++++ index.md | 1 + n002.md | 111 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 1code/chartoint.py create mode 100644 n002.md diff --git a/1code/chartoint.py b/1code/chartoint.py new file mode 100644 index 0000000..9cd54c5 --- /dev/null +++ b/1code/chartoint.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# coding=utf-8 + +def change_char(character, n): + new = [] + for c in character: + i = ord(c) + n + new.append(chr(i)) + return "".join(new) + +if __name__ == "__main__": + one = "abc" + new = change_char(one, 2) + print one + print new + diff --git a/index.md b/index.md index 750c7bd..cdb4bdf 100644 --- a/index.md +++ b/index.md @@ -106,3 +106,4 @@ ##附:网络文摘 1. [如何成为python高手](./n001.md) +2. [ASCII、Unicode、GBK和UTF-8字符编码的区别联系](./n002.md) diff --git a/n002.md b/n002.md new file mode 100644 index 0000000..b2ab84d --- /dev/null +++ b/n002.md @@ -0,0 +1,111 @@ +#ASCII、Unicode、GBK和UTF-8字符编码的区别联系 + +2015-05-08 实验楼 + +很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为“字节”。 + +再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为“计算机”。 + +开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作,如: + + 遇上0×10, 终端就换行; + + 遇上0×07, 终端就向人们嘟嘟叫; + + 遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。 + +他们看到这样很好,于是就把这些0×20以下的字节状态称为“控制码”。他们又把所有的空 格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。 + +大家看到这样,都感觉很好,于是大家都把这个方案叫做 ANSI的“Ascii”编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。 + +后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用 127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。 + +从128 到255这一页的字符集被称“扩展字符集”。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧! + +等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。 + +但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定: + + 一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字; + + 前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE; + + +这样我们就可以组合出大约7000多个简体汉字了。 + +在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的“全角”字符。 + +而原来在127号以下的那些就叫“半角”字符了。 + +中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312”。GB2312 是对 ASCII 的中文扩展。 + +但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领导人。 + +于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。 + +后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 + +后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了 GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。 + +中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 “DBCS“(Double Byte Charecter Set 双字节字符集)。 + +在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了。 + +那时候凡是受过加持,会编程的计算机僧侣们都要每天念下面这个咒语数百遍: “一个汉字算两个英文字符!一个汉字算两个英文字符……” + +因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码。 + +连大陆和台湾这样只相隔了150海里,使用着同一种语言的兄弟地区,也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字,就必须装上一个“汉字系统”,专门用来处理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持 BIG5 编码的什么“倚天汉字系统”才可以用,装错了字符系统,显示就会乱了套!这怎么办?而且世界民族之林中还有那些一时用不上电脑的穷苦人民,他们的文字又怎么办? 真是计算机的巴比伦塔命题啊! + +正在这时,大天使加百列及时出现了——一个叫 ISO (国际标谁化组织)的国际组织决定着手解决这个问题。 + +他们采用的方法很简单: + + 废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号 的编码! + +他们打算叫它”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “unicode”。 + +unicode开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ASCII里的那些“半角”字符,unicode包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于“半角”英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。 + +这时候,从旧社会里走过来的程序员开始发现一个奇怪的现象:他们的strlen函数靠不住了,一个汉字不再是相当于两个字符了,而是一个!是的,从unicode开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的“一个字符”!同时,也都是统一的“两个字节”,请注意“字符”和“字节”两个术语的不同: + + “字节”是一个8位的物理存贮单元, + + 而“字符”则是一个文化相关的符号。 + +在unicode中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。 + +unicode同样也不完美,这里就有两个的问题, + + 一个是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢? + + 第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费,文本文件的大小会因此大出二三倍,这是难以接受的。 + +unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义: + + UTF-8就是每次8个位传输数据, + + 而UTF-16就是每次16个位。 + +UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。 + +UTF-8最大的一个特点,就是它是一种变长的编码方式。 + +它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,(注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节)。 + +从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。 + +Unicode符号范围 | UTF-8编码方式 + +(十六进制) | (二进制) +—————————————————————– +0000 0000-0000 007F | 0xxxxxxx +0000 0080-0000 07FF | 110xxxxx 10xxxxxx +0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx +0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + +之前一直对字符编码很模糊,网查资料被忽悠地晕头转向,看完这篇风趣的文章,把之前模糊的知识点串联起来,并稍加总结,我和我的小伙伴们都明白了! + +via:http://toutiao.io/ + +原文链接:http://dengo.org/archives/901 \ No newline at end of file From 8dc34e37c18f15657a127f2f05ba0e360debfb97 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 19:50:57 +0800 Subject: [PATCH 044/417] pymongo --- 232.md | 318 ++++++++++++++++++++++++++++++++++++++++++++++ 2images/23201.jpg | Bin 0 -> 132931 bytes index.md | 1 + 3 files changed, 319 insertions(+) create mode 100644 232.md create mode 100644 2images/23201.jpg diff --git a/232.md b/232.md new file mode 100644 index 0000000..fa2247b --- /dev/null +++ b/232.md @@ -0,0 +1,318 @@ +>大哉!敬虔的奥秘,无人不以为然,就是:神在肉身显现,被圣灵称义,被天使看见,被传于外邦,被世人信服,被接在荣耀里。(1 TIMOTHY 3:16) + +#mongodb数据库(1) + +MongoDB开始火了,这是时代发展的需要。为此,本教程也要涉及到如何用python来操作mongodb。考虑到读者对这种数据库可能比mysql之类的更陌生,所以,要用多一点的篇幅稍作介绍,当然,更完备的内容还是要去阅读专业的mongodb书籍。 + +mongodb是属于NoSql的。 + +NoSql,全称是 Not Only Sql,指的是非关系型的数据库。它是为了大规模web应用而生的,其特征诸如模式自由、支持简易复制、简单的API、大容量数据等等。 + +MongoDB是其一,选择它,主要是因为我喜欢,否则我不会列入我的教程。数说它的特点,可能是: + +- 面向文档存储 +- 对任何属性可索引 +- 复制和高可用性 +- 自动分片 +- 丰富的查询 +- 快速就地更新 + +也许还能列出更多,基于它的特点,擅长领域就在于: + +- 大数据(太时髦了!以下可以都不看,就要用它了。) +- 内容管理和交付 +- 移动和社交基础设施 +- 用户数据管理 +- 数据平台 + +##安装mongodb + +先演示在ubuntu系统中的安装过程: + + sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 + echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list + sudo apt-get update + sudo apt-get install mongodb-10gen + +如此就安装完毕。上述安装流程来自:[Install MongoDB](http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/) + +如果你用的是其它操作系统,可以到官方网站下载安装程序:[http://www.mongodb.org/downloads](http://www.mongodb.org/downloads),能满足各种操作系统。 + +![](./2images/23201.jpg) + +>难免在安装过程中遇到问题,推荐几个资料,供参考: + +>[window平台安装 MongoDB](http://www.w3cschool.cc/mongodb/mongodb-window-install.html) + +>[NoSQL之【MongoDB】学习(一):安装说明](http://www.cnblogs.com/zhoujinyi/archive/2013/06/02/3113868.html) + +>[MongoDB 生产环境的安装与配置(Ubuntu)](https://ruby-china.org/topics/454) + +>[在Ubuntu中安装MongoDB](http://blog.fens.me/linux-mongodb-install/) + +>[在Ubuntu下进行MongoDB安装步骤](www.cnblogs.com/alexqdh/archive/2011/11/25/2263626.html) + +##启动mongodb + +安装完毕,就可以启动数据库。因为本教程不是专门讲数据库,所以,这里不设计数据库的详细讲解,请读者参考有关资料。下面只是建立一个简单的库,并且说明mongodb的基本要点,目的在于为后面用python来操作它做个铺垫。 + +执行`mongo`启动shell,显示的也是`>`,有点类似mysql的状态。在shell中,可以实现与数据库的交互操作。 + +在shell中,有一个全局变量db,使用哪个数据库,那个数据库就会被复制给这个全局变量db,如果那个数据库不存在,就会新建。 + + > use mydb + switched to db mydb + > db + mydb + +除非向这个数据库中增加实质性的内容,否则它是看不到的。 + + > show dbs; + local 0.03125GB + +向这个数据库增加点东西。mongodb的基本单元是文档,所谓文档,就类似与python中的字典,以键值对的方式保存数据。 + + > book = {"title":"from beginner to master", "author":"qiwsir", "lang":"python"} + { + "title" : "from beginner to master", + "author" : "qiwsir", + "lang" : "python" + } + > db.books.insert(book) + > db.books.find() + { "_id" : ObjectId("554f0e3cf579bc0767db9edf"), "title" : "from beginner to master", "author" : "qiwsir", "lang" : "python" } + +db指向了数据库mydb,books是这个数据库里面的一个集合(类似mysql里面的表),向集合books里面插入了一个文档(文档对应mysql里面的记录)。“数据库、集合、文档”构成了mongodb数据库。 + +从上面操作,还发现一个有意思的地方,并没有类似create之类的命令,用到数据库,就通过`use xxx`,如果不存在就建立;用到集合,就通过`db.xxx`来使用,如果没有就建立。可以总结为“随用随取随建立”。是不是简单的有点出人意料。 + + > show dbs + local 0.03125GB + mydb 0.0625GB + +当有了充实内容之后,也看到刚才用到的数据库mydb了。 + +在mongodb的shell中,可以对数据进行“增删改查”等操作。但是,我们的目的是用python来操作,所以,还是把力气放在后面用。 + +##安装pymongo + +要用python来驱动mongodb,必须要安装驱动模块,即pymongo,这跟操作mysql类似。安装方法,我最推荐如下: + + $ sudo pip install pymongo + +如果顺利,就会看到最后的提示: + + Successfully installed pymongo + Cleaning up... + +安装好之后,进入到python的交互模式里面: + + >>> import pymongo + +说明模块没有问题。 + +##连接mongodb + +既然python驱动mongdb的模块pymongo业已安装完毕,接下来就是连接,也就是建立连接对象。 + + >>> pymongo.Connection("localhost",27017) + Traceback (most recent call last): + File "", line 1, in + AttributeError: 'module' object has no attribute 'Connection' + +报错!我在去年做的项目中,就是这样做的,并且网上查看很多教程都是这么连接。 + +但是,经验主义害死人,如果: + + >>> dir(pymongo) + ['ALL', 'ASCENDING', 'CursorType', 'DESCENDING', 'DeleteMany', 'DeleteOne', 'GEO2D', 'GEOHAYSTACK', 'GEOSPHERE', 'HASHED', 'IndexModel', 'InsertOne', 'MAX_SUPPORTED_WIRE_VERSION', 'MIN_SUPPORTED_WIRE_VERSION', 'MongoClient', 'MongoReplicaSetClient', 'OFF', 'ReadPreference', 'ReplaceOne', 'ReturnDocument', 'SLOW_ONLY', 'TEXT', 'UpdateMany', 'UpdateOne', 'WriteConcern', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_cmessage', 'auth', 'bulk', 'client_options', 'collection', 'command_cursor', 'common', 'cursor', 'cursor_manager', 'database', 'errors', 'get_version_string', 'has_c', 'helpers', 'ismaster', 'message', 'mongo_client', 'mongo_replica_set_client', 'monitor', 'monotonic', 'network', 'operations', 'periodic_executor', 'pool', 'read_preferences', 'response', 'results', 'server', 'server_description', 'server_selectors', 'server_type', 'settings', 'son_manipulator', 'ssl_context', 'ssl_support', 'thread_util', 'topology', 'topology_description', 'uri_parser', 'version', 'version_tuple', 'write_concern'] + +瞪大我的那双浑浊迷茫布满血丝渴望惊喜的眼睛,透过近视镜的玻璃片,怎么也找不到Connection()这个方法。原来,刚刚安装的pymongo变了,“他变了”。 + +不过,我发现了它:MongoClient() + + >>> client = pymongo.MongoClient("localhost", 27017) + +很好。python已经和mongodb建立了连接。 + +刚才已经建立了一个数据库mydb,并且在这个库里面有一个集合books,于是: + + >>> db = client.mydb + +或者 + + >>> db = client['mydb'] + +获得数据库mydb,并赋值给变量db(这个变量不是mongodb的shell中的那个db,此处的db就是python中一个寻常的变量)。 + + >>> db.collection_names() + [u'system.indexes', u'books'] + +查看集合,发现了我们已经建立好的那个books,于是在获取这个集合,并赋值给一个变量books: + + >>> books = db["books"] + +或者 + + >>> books = db.books + +接下来,就可以操作这个集合中的具体内容了。 + +###编辑 + +刚刚的books所引用的是一个mongodb的集合对象,它就跟前面学习过的其它对象一样,有一些方法供我们来驱使。 + + >>> type(books) + + + >>> dir(books) + ['_BaseObject__codec_options', '_BaseObject__read_preference', '_BaseObject__write_concern', '_Collection__create', '_Collection__create_index', '_Collection__database', '_Collection__find_and_modify', '_Collection__full_name', '_Collection__name', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattr__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__iter__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_command', '_count', '_delete', '_insert', '_socket_for_primary_reads', '_socket_for_reads', '_socket_for_writes', '_update', 'aggregate', 'bulk_write', 'codec_options', 'count', 'create_index', 'create_indexes', 'database', 'delete_many', 'delete_one', 'distinct', 'drop', 'drop_index', 'drop_indexes', 'ensure_index', 'find', 'find_and_modify', 'find_one', 'find_one_and_delete', 'find_one_and_replace', 'find_one_and_update', 'full_name', 'group', 'index_information', 'initialize_ordered_bulk_op', 'initialize_unordered_bulk_op', 'inline_map_reduce', 'insert', 'insert_many', 'insert_one', 'list_indexes', 'map_reduce', 'name', 'next', 'options', 'parallel_scan', 'read_preference', 'reindex', 'remove', 'rename', 'replace_one', 'save', 'update', 'update_many', 'update_one', 'with_options', 'write_concern'] + +这么多方法不会一一介绍,只是按照“增删改查”的常用功能,介绍几种。读者可以使用help()去查看每一种方法的使用说明。 + + >>> books.find_one() + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + +提醒读者注意的是,如果你熟悉了mongodb的shell中的命令,跟pymongo中的方法稍有差别,比如刚才这个,在mongodb的shell中是这样子的: + + > db.books.findOne() + { + "_id" : ObjectId("554f0e3cf579bc0767db9edf"), + "title" : "from beginner to master", + "author" : "qiwsir", + "lang" : "python" + } + +请注意区分。 + +目前在集合books中,有一个文档,还想再增加,于是插入一条: + +**新增和查询** + + >>> b2 = {"title":"physics", "author":"Newton", "lang":"english"} + >>> books.insert(b2) + ObjectId('554f28f465db941152e6df8b') + +成功地向集合中增加了一个文档。得看看结果(我们就是充满好奇心的小孩子,我记得女儿小时候,每个给她照相,拍了一张,她总要看一看。现在我们似乎也是这样,如果不看看,总觉得不放心),看看就是一种查询。 + + >>> books.find().count() + 2 + +这是查看当前集合有多少个文档的方式,返回值为2,则说明有两条文档了。还是要看看内容。 + + >>> books.find_one() + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + +这个命令就不行了,因为它只返回第一条。必须要: + + >>> for i in books.find(): + ... print i + ... + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + +在books引用的对象中有find()方法,它返回的是一个可迭代对象,包含着集合中所有的文档。 + +由于文档是键值对,也不一定每条文档都要结构一样,比如,也可以插入这样的文档进入集合。 + + >>> books.insert({"name":"Hertz"}) + ObjectId('554f2b4565db941152e6df8c') + >>> for i in books.find(): + ... print i + ... + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + {u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz'} + +如果有多个文档,想一下子插入到集合中(在mysql中,可以实现多条数据用一条命令插入到表里面,还记得吗?忘了看[上一节](./231.md)),可以这么做: + + >>> n1 = {"title":"java", "name":"Bush"} + >>> n2 = {"title":"fortran", "name":"John Warner Backus"} + >>> n3 = {"title":"lisp", "name":"John McCarthy"} + >>> n = [n1, n2, n3] + >>> n + [{'name': 'Bush', 'title': 'java'}, {'name': 'John Warner Backus', 'title': 'fortran'}, {'name': 'John McCarthy', 'title': 'lisp'}] + >>> books.insert(n) + [ObjectId('554f30be65db941152e6df8d'), ObjectId('554f30be65db941152e6df8e'), ObjectId('554f30be65db941152e6df8f')] + +这样就完成了所谓的批量插入,查看一下文档条数: + + >>> books.find().count() + 6 + +但是,要提醒读者,批量插入的文档大小是有限制的,网上有人说不要超过20万条,有人说不要超过16MB,我没有测试过。在一般情况下,或许达不到上线,如果遇到极端情况,就请读者在使用时多注意了。 + +如果要查询,除了通过循环之外,能不能按照某个条件查呢?比如查找`'name'='Bush'`的文档: + + >>> books.find_one({"name":"Bush"}) + {u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'} + +对于查询结果,还可以进行排序: + + >>> for i in books.find().sort("title", pymongo.ASCENDING): + ... print i + ... + {u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz'} + {u'_id': ObjectId('554f30be65db941152e6df8e'), u'name': u'John Warner Backus', u'title': u'fortran'} + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'} + {u'_id': ObjectId('554f30be65db941152e6df8f'), u'name': u'John McCarthy', u'title': u'lisp'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + +这是按照"title"的值的升序排列的,注意sort()中的第二个参数,意思是升序排列。如果按照降序,就需要将参数修改为`pymongo.DESCEDING`,也可以指定多个排序键。 + + >>> for i in books.find().sort([("name",pymongo.ASCENDING),("name",pymongo.DESCENDING)]): + ... print i + ... + {u'_id': ObjectId('554f30be65db941152e6df8e'), u'name': u'John Warner Backus', u'title': u'fortran'} + {u'_id': ObjectId('554f30be65db941152e6df8f'), u'name': u'John McCarthy', u'title': u'lisp'} + {u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz'} + {u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'} + {u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'} + {u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'} + +**更新** + +对于已有数据,进行更新,是数据库中常用的操作。比如,要更新name为Hertz那个文档: + + >>> books.update({"name":"Hertz"}, {"$set": {"title":"new physics", "author":"Hertz"}}) + {u'updatedExisting': True, u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1} + >>> books.find_one({"author":"Hertz"}) + {u'title': u'new physics', u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz', u'author': u'Hertz'} + +在更新的时候,用了一个`$set`修改器,它可以用来指定键值,如果键不存在,就会创建。 + +关于修改器,不仅仅是这一个,还有别的呢。 + +|修改器|描述| +|----|----| +|$set|用来指定一个键的值。如果不存在则创建它| +|$unset|完全删除某个键| +|$inc|增加已有键的值,不存在则创建(只能用于增加整数、长整数、双精度浮点数) +|$push|数组修改器只能操作值为数组,存在key在值末尾增加一个元素,不存在则创建一个数组| + +**删除** + +删除可以用remove()方法: + + >>> books.remove({"name":"Bush"}) + {u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1} + >>> books.find_one({"name":"Bush"}) + >>> + +这是将那个文档全部删除。当然,也可以根据mongodb的语法规则,写个条件,按照条件删除。 + +**索引** + +索引的目的是为了让查询速度更快,当然,在具体的项目开发中,要视情况而定是否建立索引。因为建立索引也是有代价的。 + + >>> books.create_index([("title", pymongo.DESCENDING),]) + u'title_-1' + +我这里仅仅是对pymongo模块做了一个非常简单的介绍,在实际使用过程中,上面知识是很有限的,所以需要读者根据具体应用场景再结合mongodb的有关知识去尝试新的语句。 + +------ + +[总目录](./index.md)   |   [上节:mysql数据库(2)](./231.md)   |   [下节:sqlite数据库](./233.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2images/23201.jpg b/2images/23201.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea6db163faa88beea430fd3a9de394c180f7b16d GIT binary patch literal 132931 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模块,shelve模块 2. [MySQL数据库(1)](./230.md)==>MySQL概况,安装,python连接MySQL模块和方法 3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 +4. [MongoDB数据库](./232.md)==>mongodb的安装启动,pymongo模块:连接客户端,数据库的增删改查操作 #第叁季 实战 From f9c47a04560dfeef6873ffe8e9415f3d0e37cdb9 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 20:11:17 +0800 Subject: [PATCH 045/417] modify --- 204.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/204.md b/204.md index b76878f..ad66871 100644 --- a/204.md +++ b/204.md @@ -227,7 +227,7 @@ func是一个函数,seq是一个序列对象。在执行的时候,序列对 - 对iterable中的每个元素,依次应用function的方法(函数)(这本质上就是一个for循环)。 - 将所有结果返回一个list。 -- 如果参数很多,则对么个参数并行执行function。 +- 如果参数很多,则对那些参数并行执行function。 例如: From a60d9fb28fd89e88cefd76a5086d9220cc0f1392 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 20:11:39 +0800 Subject: [PATCH 046/417] pymongo --- 232.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/232.md b/232.md index fa2247b..46dc87a 100644 --- a/232.md +++ b/232.md @@ -122,7 +122,9 @@ db指向了数据库mydb,books是这个数据库里面的一个集合(类似 报错!我在去年做的项目中,就是这样做的,并且网上查看很多教程都是这么连接。 -但是,经验主义害死人,如果: +所以,读者如果用的是旧版本的pymongo,比如2.8,仍然可以使用上面的连接方法,如果是像我一样,是用的新的(我安装时没有选版本),就得注意这个问题了。 + +经验主义害死人。必须看看下面有哪些方法可以用: >>> dir(pymongo) ['ALL', 'ASCENDING', 'CursorType', 'DESCENDING', 'DeleteMany', 'DeleteOne', 'GEO2D', 'GEOHAYSTACK', 'GEOSPHERE', 'HASHED', 'IndexModel', 'InsertOne', 'MAX_SUPPORTED_WIRE_VERSION', 'MIN_SUPPORTED_WIRE_VERSION', 'MongoClient', 'MongoReplicaSetClient', 'OFF', 'ReadPreference', 'ReplaceOne', 'ReturnDocument', 'SLOW_ONLY', 'TEXT', 'UpdateMany', 'UpdateOne', 'WriteConcern', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_cmessage', 'auth', 'bulk', 'client_options', 'collection', 'command_cursor', 'common', 'cursor', 'cursor_manager', 'database', 'errors', 'get_version_string', 'has_c', 'helpers', 'ismaster', 'message', 'mongo_client', 'mongo_replica_set_client', 'monitor', 'monotonic', 'network', 'operations', 'periodic_executor', 'pool', 'read_preferences', 'response', 'results', 'server', 'server_description', 'server_selectors', 'server_type', 'settings', 'son_manipulator', 'ssl_context', 'ssl_support', 'thread_util', 'topology', 'topology_description', 'uri_parser', 'version', 'version_tuple', 'write_concern'] From a5e276c7d581395555d42309c464d03f57c0aba2 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 20:19:07 +0800 Subject: [PATCH 047/417] pymongo --- 232.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/232.md b/232.md index 46dc87a..9458b42 100644 --- a/232.md +++ b/232.md @@ -105,6 +105,18 @@ db指向了数据库mydb,books是这个数据库里面的一个集合(类似 Successfully installed pymongo Cleaning up... +如果不选择版本,安装的应该是最新版本的,我在本教程测试的时候,安装的是: + + >>> import pymongo + >>> pymongo.version + '3.0.1' + +这个版本在后面给我挖了一个坑。如果读者要指定版本,比如安装2.8版本的,可以: + + $ sudo pip install pymongo==2.8 + +如果用这个版本,我后面遇到的坑能够避免。 + 安装好之后,进入到python的交互模式里面: >>> import pymongo From 449c3c75c2e4423f4d23a1676306a3a28cc3ed52 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Sun, 10 May 2015 21:14:04 +0800 Subject: [PATCH 048/417] modify --- 209.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2code/20902_1.py | 29 +++++++++++++++++++++++++++++ 2code/20904.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 2code/20902_1.py create mode 100644 2code/20904.py diff --git a/209.md b/209.md index 9592f7a..8c21fb6 100644 --- a/209.md +++ b/209.md @@ -127,6 +127,54 @@ 由上述两个实例,已经清楚看到了继承的特点,即将父类的方法和属性全部承接到子类中;如果子类重写了父类的方法,就使用子类的该方法,父类的被遮盖。 +##多重继承的顺序 + +多重继承的顺序很必要了解。比如,如果一个子类继承了两个父类,并且两个父类有同样的方法或者属性,那么在实例化子类后,调用那个方法或属性,是属于哪个父类的呢?造一个没有实际意义,纯粹为了解决这个问题的程序: + + #!/usr/bin/env python + # coding=utf-8 + + class K1(object): + def foo(self): + print "K1-foo" + + class K2(object): + def foo(self): + print "K2-foo" + def bar(self): + print "K2-bar" + + class J1(K1, K2): + pass + + class J2(K1, K2): + def bar(self): + print "J2-bar" + + class C(J1, J2): + pass + + if __name__ == "__main__": + print C.__mro__ + m = C() + m.foo() + m.bar() + +这段代码,保存后运行: + + $ python 20904.py + (, , , , , ) + K1-foo + J2-bar + +代码中的`print C.__mro__`是要打印出类的继承顺序。从上面清晰看出来了。如果要执行foo()方法,首先看J1,没有,看J2,还没有,看J1里面的K1,有了,即C==>J1==>J2==>K1;bar()也是按照这个顺序,在J2中就找到了一个。 + +这种对继承属性和方法搜索的顺序称之为“广度优先”。 + +新式类用以及python3.x中都是按照此顺序原则搜寻属性和方法的。 + +但是,在旧式类中,是按照“深度优先”的顺序的。因为后面读者也基本不用旧式类,所以不举例。如果读者愿意,可以自己模仿上面代码,探索旧式类的“深度优先”含义。 + ##super函数 对于初始化函数的继承,跟一般方法的继承,还有点不同。可以看下面的例子: diff --git a/2code/20902_1.py b/2code/20902_1.py new file mode 100644 index 0000000..088a73a --- /dev/null +++ b/2code/20902_1.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# coding=utf-8 + +__metaclass__ = type + +class Person: + + def eye(self): + print "two eyes" + + def breast(self, n): + print "The breast is: ",n + +class Girl: + age = 28 + def color(self): + print "The girl is white" + def eye(self): + print "girl's eyes are big." + +class HotGirl(Person, Girl): + pass + +if __name__ == "__main__": + kong = HotGirl() + kong.eye() + kong.breast(90) + kong.color() + print kong.age diff --git a/2code/20904.py b/2code/20904.py new file mode 100644 index 0000000..4f132a1 --- /dev/null +++ b/2code/20904.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# coding=utf-8 + +class K1(object): + def foo(self): + print "K1-foo" + +class K2(object): + def foo(self): + print "K2-foo" + def bar(self): + print "K2-bar" + +class J1(K1, K2): + pass + +class J2(K1, K2): + def bar(self): + print "J2-bar" + +class C(J1, J2): + pass + +if __name__ == "__main__": + print C.__mro__ + m = C() + m.foo() + m.bar() + From a51275b281e59d0a822ee16c120dd2d6a57df5ac Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 11 May 2015 10:47:50 +0800 Subject: [PATCH 049/417] modify --- 231.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/231.md b/231.md index 7cbc6ea..4ed0e48 100644 --- a/231.md +++ b/231.md @@ -325,7 +325,12 @@ cur.scroll(n),或者,cur.scroll(n,"relative"):意思是相对当前位置 这就大事完吉了。 -python来操作mysql数据,基本方法介绍完毕。 +应该还有个小尾巴,那就是当你操作数据完毕,不要忘记关门: + + >>> cur.close() + >>> conn.close() + +门锁好了,放心离开。 ------ From abb62081ebd7300f1b04381e644274f44633a549 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Mon, 11 May 2015 10:48:27 +0800 Subject: [PATCH 050/417] sqlite --- 233.md | 145 +++++++++++++++++++++++++++++++++++++++++++++ 2code/23301.db | Bin 0 -> 2048 bytes 2code/23301.sqlite | Bin 0 -> 2048 bytes index.md | 1 + 4 files changed, 146 insertions(+) create mode 100644 233.md create mode 100644 2code/23301.db create mode 100644 2code/23301.sqlite diff --git a/233.md b/233.md new file mode 100644 index 0000000..fa2529a --- /dev/null +++ b/233.md @@ -0,0 +1,145 @@ +>然而,敬虔加上知足的心便是大利了,因为我们没有带什么到世上来,也不能带什么去,只要有衣有食,就当知足。但那些想要发财的人,就陷在迷惑、落在网罗和许多无知有害的私欲里,叫人沉在败坏和灭亡中。贪财是万恶之根。有人贪恋钱财,就被引诱离了真道,用许多愁苦把自己刺透了。(1 TIMOTHY 6:6-10) + +#SQLite数据库 + +SQLite是一个小型的关系型数据库,它最大的特点在于不需要服务器、零配置。在前面的两个服务器,不管是MySQL还是MongoDB,都需要“安装”,安装之后,它运行起来,其实是已经有一个相应的服务器在跑着呢。而SQLite不需要这样,首先python已经将相应的驱动模块作为标准库一部分了,只要安装了python,就可以使用;另外,它也不需要服务器,可以类似操作文件那样来操作SQLite数据库文件。还有一点也不错,SQLite源代码不受版权限制。 + +SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使用。 + +跟操作mysql数据库类似,对于SQLite数据库,也要通过以下几步: + +- 建立连接对象 +- 连接对象方法:建立游标对象 +- 游标对象方法:执行sql语句 + +##建立连接对象 + +由于SQLite数据库的驱动已经在python里面了,所以,只要引用就可以直接使用 + + >>> import sqlite3 + >>> conn = sqlite3.connect("23301.db") + +这样就得到了连接对象,是不是比mysql连接要简化了很多呢。在`sqlite3.connect("23301.db")`语句中,如果已经有了那个数据库,就连接上它;如果没有,就新建一个。注意,这里的路径可以随意指定的。 + +不妨到目录中看一看,是否存在了刚才建立的数据库文件。 + + /2code$ ls 23301.db + 23301.db + +果然有了一个文件。 + +连接对象建立起来之后,就要使用连接对象的方法继续工作了。 + + >>> dir(conn) + ['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__call__', '__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'commit', 'create_aggregate', 'create_collation', 'create_function', 'cursor', 'enable_load_extension', 'execute', 'executemany', 'executescript', 'interrupt', 'isolation_level', 'iterdump', 'load_extension', 'rollback', 'row_factory', 'set_authorizer', 'set_progress_handler', 'text_factory', 'total_changes'] + +##游标对象 + +这步跟mysql也类似,要建立游标对象。 + + >>> cur = conn.cursor() + +接下来对数据库内容的操作,都是用游标对象方法来实现了: + + >>> dir(cur) + ['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'arraysize', 'close', 'connection', 'description', 'execute', 'executemany', 'executescript', 'fetchall', 'fetchmany', 'fetchone', 'lastrowid', 'next', 'row_factory', 'rowcount', 'setinputsizes', 'setoutputsize'] + +是不是看到熟悉的名称了:`close(), execute(), executemany(), fetchall()` + +###创建数据库表 + +在mysql中,我们演示的是利用mysql的shell来创建的表。其实,当然可以使用sql语句,在python中实现这个功能。这里对sqlite数据库,就如此操作一番。 + + >>> create_table = "create table books (title text, author text, lang text) " + >>> cur.execute(create_table) + + +这样就在数据库23301.db中建立了一个表books。对这个表可以增加数据了: + + >>> cur.execute('insert into books values ("from beginner to master", "laoqi", "python")') + + +为了保证数据能够保存,还要(这是多么熟悉的操作流程和命令呀): + + >>> conn.commit() + >>> cur.close() + >>> conn.close() + +支持,刚才建立的那个数据库中,已经有了一个表books,表中已经有了一条记录。 + +整个流程都不陌生。 + +###查询 + +存进去了,总要看看,这算强迫症吗? + + >>> conn = sqlite3.connect("23301.db") + >>> cur = conn.cursor() + >>> cur.execute('select * from books') + + >>> print cur.fetchall() + [(u'from beginner to master', u'laoqi', u'python')] + +###批量插入 + +多增加点内容,以便于做别的操作: + + >>> books = [("first book","first","c"), ("second book","second","c"), ("third book","second","python")] + +这回来一个批量插入 + + >>> cur.executemany('insert into books values (?,?,?)', books) + + >>> conn.commit() + +用循环语句打印一下查询结果: + + >>> rows = cur.execute('select * from books') + >>> for row in rows: + ... print row + ... + (u'from beginner to master', u'laoqi', u'python') + (u'first book', u'first', u'c') + (u'second book', u'second', u'c') + (u'third book', u'second', u'python') + +###更新 + +正如前面所说,在cur.execute()中,你可以写SQL语句,来操作数据库。 + + >>> cur.execute("update books set title='physics' where author='first'") + + >>> conn.commit() + +按照条件查处来看一看: + + >>> cur.execute("select * from books where author='first'") + + >>> cur.fetchone() + (u'physics', u'first', u'c') + +###删除 + +在sql语句中,这也是常用的。 + + >>> cur.execute("delete from books where author='second'") + + >>> conn.commit() + + >>> cur.execute("select * from books") + + >>> cur.fetchall() + [(u'from beginner to master', u'laoqi', u'python'), (u'physics', u'first', u'c')] + +不要忘记,在你完成对数据库的操作是,一定要关门才能走人: + + >>> cur.close() + >>> conn.close() + +作为基本知识,已经介绍差不多了。当然,在实践的编程中,或许会遇到问题,就请读者多参考官方文档:[https://docs.python.org/2/library/sqlite3.html](https://docs.python.org/2/library/sqlite3.html) + +------ + +[总目录](./index.md)   |   [上节:MongoDB数据库](./232.md)   |   [下节:电子表格](./234.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/23301.db b/2code/23301.db new file mode 100644 index 0000000000000000000000000000000000000000..3a102e7ec4e7dbc34d9ded37927d1f507c21590a GIT binary patch literal 2048 zcmWFz^vNtqRY=P(%1ta$FlJz3U}R))P*7lCU|$|OfWeIxjKfpDug&X`M4^8 zg%mVOGD~t&6-rVoN^}$wOG`5Hi=dpG#JqGcQxlXonV1hTGv8o7%G}4?M~Tx$^^S(X zXb4ak0w#F$OW=?bWMYvP=P$^pEY3_WPRlGRE=g8nWU&^POe@OIRY*!r&&$|OfWeIxjKfpDug&X`M4^8 zg%mVOGD~t&6-rVoN^}$wOG`5Hi=dpG#JqGcQxlXonV1hTGv8o7%G}4?M~Tx$^^S(X zXb4ak0w#F$OW=?bWMYvP=P$^pEY3_WPRlGRE=g8nWU&^POe@OIRY*!r&&MySQL概况,安装,python连接MySQL模块和方法 3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 4. [MongoDB数据库](./232.md)==>mongodb的安装启动,pymongo模块:连接客户端,数据库的增删改查操作 +5. [SQLite数据库](./233.md)==>通过sqlite3模块操作SQLite数据库:连接对象方法,游标对象方法,数据库增删改查 #第叁季 实战 From 0a2c859f20873cbd4fb3544208cdcf6f03eba038 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 17:09:52 +0800 Subject: [PATCH 051/417] modify --- 123.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/123.md b/123.md index f508d25..6cc8d4e 100644 --- a/123.md +++ b/123.md @@ -1,6 +1,6 @@ >"But be on your guard so that your hearts are not wighted down with dissipation and drunkenness and the worries of this life, and that day close down upon you suddenly like a trap. For it will overtake all who live on the face of the whole earht. But staty alert at all times, praying that you may have strength to eacape all these things that must happen, and to stand before the Son of Man." ->你们要谨慎,恐怕因贪食醉酒并今生的思虑,累住你们的心,那日子就如同网罗忽然临到你们。因为那日子要这样临到全地上一切居住的人。你们要是是儆醒,常常祈求,是你们能逃避这一切要来的事,得以站立在人子面前。(LUKE 21:34-36) +>你们要谨慎,恐怕因贪食醉酒并今生的思虑,累住你们的心,那日子就如同网罗忽然临到你们。因为那日子要这样临到全地上一切居住的人。你们要时时儆醒,常常祈求,是你们能逃避这一切要来的事,得以站立在人子面前。(LUKE 21:34-36) #语句(3) From dc2386805e20409682ae657898b466eb3050b64a Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 17:10:25 +0800 Subject: [PATCH 052/417] python excel --- 234.md | 272 ++++++++++++++++++++++++++++++++++++++++++++++ 2code/23401.xlsx | Bin 0 -> 5965 bytes 2images/23401.jpg | Bin 0 -> 99180 bytes index.md | 2 +- 4 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 234.md create mode 100644 2code/23401.xlsx create mode 100644 2images/23401.jpg diff --git a/234.md b/234.md new file mode 100644 index 0000000..07c0ed6 --- /dev/null +++ b/234.md @@ -0,0 +1,272 @@ +>人若自洁,脱离卑贱的事,就必作贵重的器皿,成为圣洁,合乎主用,预备行各样的善事。你要逃避少年的私欲,同那清心祷告主的人追求公义、信德、仁爱、和平。惟有那愚拙无学问的辩论,总要弃绝,因为知道这等事是起争竞的。(2 TIMOTHY 2:21-23) + +#电子表格 + +一提到电子表格,可能立刻想到的是excel。殊不知,电子表格,还是“历史悠久”的呢,比word要长久多了。根据维基百科的记载整理一个简史: + +>VisiCalc是第一个电子表格程序,用于苹果II型电脑。由丹·布李克林(Dan Bricklin)和鮑伯·法蘭克斯頓(Bob Frankston)發展而成,1979年10月跟著蘋果二號電腦推出,成為蘋果二號電腦上的「殺手應用軟體」。 + +>接下来是Lotus 1-2-3,由Lotus Software(美國蓮花軟體公司)於1983年起所推出的電子試算表軟體,在DOS時期廣為個人電腦使用者所使用,是一套殺手級應用軟體。也是世界上第一个销售超过100万套的软件。 + +>然后微软也开始做电子表格,早在1982年,它推出了它的第一款電子制表軟件──Multiplan,並在CP/M系統上大獲成功,但在MS-DOS系統上,Multiplan敗給了Lotus 1-2-3。 + +>1985年,微软推出第一款Excel,但它只用於Mac系統;直到1987年11月,微软的第一款適用於Windows系統的Excel才诞生,不过,它一出来,就与Windows系统直接捆綁,由于此后windows大行其道,并且Lotus1-2-3遲遲不能適用於Windows系統,到了1988年,Excel的銷量超過了1-2-3。 + +>此后就是微软的天下了,Excel后来又并入了Office里面,成为了Microsoft Office Excel。 + +>尽管Excel已经发展了很多代,提供了大量的用戶界面特性,但它仍然保留了第一款電子制表軟件VisiCalc的特性:行、列組成單元格,數據、與數據相關的公式或者對其他單元格的絕對引用保存在單元格中。 + +>由于微软独霸天下,Lotus 1-2-3已经淡出了人们的视线,甚至于误认为历史就是从微软开始的。 + +>其实,除了微软的电子表格,在Linux系统中也有很好的电子表格,google也提供了不错的在线电子表格(可惜某国内不能正常访问)。 + +从历史到现在,电子表格都很广泛的用途。所以,python也要操作一番电子表格,因为有的数据,或许就是存在电子表格中。 + +##openpyl + +openpyl模块是解决Microsoft Excel 2007/2010之类版本中扩展名是Excel 2010 xlsx/xlsm/xltx/xltm的文件的读写的第三方库。(差点上不来气,这句话太长了。) + +###安装 + +安装第三方库,当然用法力无边的pip install + + $ sudo pip install openpyxl + +如果最终看到下面的提示,恭喜你,安装成功。 + + Successfully installed openpyxl jdcal + Cleaning up... + +###workbook和sheet + +第一步,当然是要引入模块,用下面的方式: + + >>> from openpyxl import Workbook + +接下来就用`Workbook()`类里面的方法展开工作: + + >>> wb = Workbook() + +请回忆Excel文件,如果想不起来,就打开Excel,我们第一眼看到的是一个称之为工作簿(workbook)的东西,里面有几个sheet,默认是三个,当然可以随意增删。默认又使用第一个sheet。 + + >>> ws = wb.active + +每个工作簿中,至少要有一个sheet,通过这条指令,就在当前工作簿中建立了一个sheet,并且它是当前正在使用的。 + +还可以在这个sheet后面追加: + + >>> ws1 = wb.create_sheet() + +甚至,还可以加塞: + + >>> ws2 = wb.create_sheet(1) + +排在了第二个位置。 + +在Excel文件中一样,创建了sheet之后,默认都是以"Sheet1"、"Sheet2"样子来命名的,然后我们可以给其重新命名。在这里,依然可以这么做。 + + >>> ws.title = "python" + +ws所引用的sheet对象名字就是"python"了。 + +此时,可以使用下面的方式从工作簿对象中得到sheet + + >>> ws01 = wb['python'] #sheet和工作簿的关系,类似键值对的关系 + >>> ws is ws01 + True + +或者用这种方式 + + >>> ws02 = wb.get_sheet_by_name("python") #这个方法名字也太直接了,方法的参数就是sheet名字 + >>> ws is ws02 + True + +整理一下到目前为止我们已经完成的工作:建立了工作簿(wb),还有三个sheet。还是显示一下比较好: + + >>> print wb.get_sheet_names() + ['python', 'Sheet2', 'Sheet1'] + +Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用了一个加塞的方法。这跟Excel中差不多少,如果sheet命名了,就按照那个名字显示,否则就默认为名字是"Sheet1"形状的(注意,第一个字母大写)。 + +也可以用循环语句,把所有的sheet名字打印出来。 + + >>> for sh in wb: + ... print sh.title + ... + python + Sheet2 + Sheet1 + +如果读者去`dir(wb)`工作簿对象的属性和方法,会发现它具有迭代的特征`__iter__`方法。说明,工作簿是可迭代的。 + +###cell + +为了能够清楚理解填数据的过程,将电子表中约定的名称以下图方式说明: + +![](./2images/23401.jpg) + +对于sheet,其中的cell是它的下级单位。所以,要得到某个cell,可以这样: + + b4 = ws['B4'] + +如果B4这个cell已经有了,用这种方法就是将它的值赋给了变量b4;如果sheet中没有这个cell,那么就创建这个cell对象。 + +请读者注意,当我们打开Excel,默认已经画好了好多cell。但是,在python操作的电子表格中,不会默认画好那样一个表格,一切都要创建之后才有。所以,如果按照前面的操作流程,上面就是创建了B4这个cell,并且把它作为一个对象被b4变量引用。 + +如果要给B4添加数据,可以这么做: + + >>> ws['B4'] = 4444 + +因为b4引用了一个cell对象,所以可以利用这个对象的属性来查看其值: + + >>> b4.value + 4444 + +要获得(或者建立并获得)某个cell对象,还可以使用下面方法: + + >>> a1 = ws.cell("A1") + +或者: + + >>> a2 = ws.cell(row = 2, column = 1) + +刚才已经提到,在建立了sheet之后,内存中的它并没有cell,需要程序去建立。上面都是一个一个地建立,能不能一下建立多个呢?比如要类似下面的: + +|A1|B1|C1| +|A2|B2|C2| +|A3|B3|C3| + +就可以如同切片那样来操作: + + >>> cells = ws["A1":"C3"] + +可以用下面方法看看创建结果: + + >>> tuple(ws.iter_rows("A1:C3")) + ((, , ), + (, , ), + (, , )) + +这是按照横向顺序数过来来的,即A1-B1-C1,然后下一横行。还可以用下面的循环方法,一个一个地读到每个cell对象: + + >>> for row in ws.iter_rows("A1:C3"): + ... for cell in row: + ... print cell + ... + + + + + + + + + + +也可以用sheet对象的`rows`属性,得到按照横向顺序依次排列的cell对象(注意观察结果,因为没有进行范围限制,所以是目前sheet中所有的cell,前面已经建立到第四行了B4,所以,要比上面的操作多一个row): + + >>> ws.rows + ((, , ), + (, , ), + (, , ), + (, , )) + +用sheet对象的`columns`属性,得到的是按照纵向顺序排列的cell对象(注意观察结果): + + >>> ws.columns + ((, , , ), + (, , , ), + (, , , )) + +不管用那种方法,只要得到了cell对象,接下来就可以依次赋值了。比如要将上面的表格中,依次填写上1,2,3,... + + >>> i = 1 + >>> for cell in ws.rows: + ... cell.value = i + ... i += 1 + ... + Traceback (most recent call last): + File "", line 2, in + AttributeError: 'tuple' object has no attribute 'value' + +报错了。什么错误。关键就是没有注意观察上面的结果。tuple里面是以tuple为元素,再里面才是cell对象。所以,必须要“时时警醒”,常常谨慎。 + + >>> for row in ws.rows: + ... for cell in row: + ... cell.value = i + ... i += 1 + ... + +如此,就给每个cell添加了数据。查看一下,不过要换一个属性: + + >>> for col in ws.columns: + ... for cell in col: + ... print cell.value + ... + 1 + 4 + 7 + 10 + 2 + 5 + 8 + 11 + 3 + 6 + 9 + 12 + +虽然看着有点不舒服,但的确达到了前面的要求。 + +###保存 + +把辛苦工作的结果保存一下吧。 + + >>> wb.save("23401.xlsx") + +如果有同名文件存在,会覆盖。 + +###读取已有文件 + +如果已经有一个.xlsx文件,要读取它,可以这样来做: + + >>> from openpyxl import load_workbook + >>> wb2 = load_workbook("23401.xlsx") + >>> print wb2.get_sheet_names() + ['python', 'Sheet2', 'Sheet1'] + >>> ws_wb2 = wb2["python"] + >>> for row in ws_wb2.rows: + ... for cell in row: + ... print cell.value + ... + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + +很好,就是这个文件。 + +##其它第三方库 + +针对电子表格的第三方库,除了上面这个openpyxl之外,还有别的,列出几个,供参考,使用方法大同小异。 + +- xlsxwriter:针对Excel 2010格式,如.xlsx,官方网站:https://xlsxwriter.readthedocs.org/,这个官方文档写的图文并茂。非常好读。 + +下面两个用来处理.xls格式的电子表表格。 + +- xlrd:网络文件:https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966 +- xlwt:网络文件:http://xlwt.readthedocs.org/en/latest/ + +------ + +[总目录](./index.md)   |   [上节:SQLite数据库](./233.md)   |   [下节:网站概述](./301.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/2code/23401.xlsx b/2code/23401.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c52b2ff22ab3b8c7734936b50494c032379f057d GIT binary patch literal 5965 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 literal 0 HcmV?d00001 diff --git a/index.md b/index.md index d388321..b89c737 100644 --- a/index.md +++ b/index.md @@ -97,7 +97,7 @@ 3. [MySQL数据库(2)](./231.md)==>连接对象方法,游标对象方法:数据库的增删改查基本操作 4. [MongoDB数据库](./232.md)==>mongodb的安装启动,pymongo模块:连接客户端,数据库的增删改查操作 5. [SQLite数据库](./233.md)==>通过sqlite3模块操作SQLite数据库:连接对象方法,游标对象方法,数据库增删改查 - +6. [电子表格](./234.md)==>python操作Excel文件的第三方库openpyxl使用方法,以及其它与Excel相关的第三方库 #第叁季 实战 From cafa38b55a27eadfffdd82b1b93bcfa504d40085 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 17:13:48 +0800 Subject: [PATCH 053/417] python excel --- 234.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/234.md b/234.md index 07c0ed6..61bb0b0 100644 --- a/234.md +++ b/234.md @@ -258,7 +258,7 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用 针对电子表格的第三方库,除了上面这个openpyxl之外,还有别的,列出几个,供参考,使用方法大同小异。 -- xlsxwriter:针对Excel 2010格式,如.xlsx,官方网站:https://xlsxwriter.readthedocs.org/,这个官方文档写的图文并茂。非常好读。 +- xlsxwriter:针对Excel 2010格式,如.xlsx,官方网站:[https://xlsxwriter.readthedocs.org/](https://xlsxwriter.readthedocs.org/),这个官方文档写的图文并茂。非常好读。 下面两个用来处理.xls格式的电子表表格。 From 81d6f99dfbad5285c2a8750938a21979e0807376 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 19:20:40 +0800 Subject: [PATCH 054/417] python excel --- 234.md | 4 ++++ 2images/23402.jpg | Bin 0 -> 18975 bytes 2 files changed, 4 insertions(+) create mode 100644 2images/23402.jpg diff --git a/234.md b/234.md index 61bb0b0..a6c3d81 100644 --- a/234.md +++ b/234.md @@ -226,6 +226,10 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用 如果有同名文件存在,会覆盖。 +此时,可以用Excel打开这个文件,看看可视化的结果: + +![](./2images/23402.jpg) + ###读取已有文件 如果已经有一个.xlsx文件,要读取它,可以这样来做: diff --git a/2images/23402.jpg b/2images/23402.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00ce8f4713fe4b0ba8d4843dd80e5402e5418eb7 GIT binary patch literal 18975 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 Date: Tue, 12 May 2015 20:14:12 +0800 Subject: [PATCH 055/417] python excel --- 234.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/234.md b/234.md index a6c3d81..6da1d0a 100644 --- a/234.md +++ b/234.md @@ -271,6 +271,6 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用 ------ -[总目录](./index.md)   |   [上节:SQLite数据库](./233.md)   |   [下节:网站概述](./301.md) +[总目录](./index.md)   |   [上节:SQLite数据库](./233.md)   |   [下节:实战-引](./300.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file From ca8dafa721ea1be8d764aedb0af040f11dfc3daa Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 12 May 2015 20:14:35 +0800 Subject: [PATCH 056/417] doit --- 300.md | 15 +++++++++++++++ index.md | 2 ++ 2 files changed, 17 insertions(+) create mode 100644 300.md diff --git a/300.md b/300.md new file mode 100644 index 0000000..c3c80cc --- /dev/null +++ b/300.md @@ -0,0 +1,15 @@ +>然而主的仆人不可争竞;只要温温和和地待众人,善于教导,存心忍耐,用温柔劝诫那抵挡的人,或者神给他们悔改的心,可以明白真道,叫他们这已经被魔鬼任意掳去的可以醒悟,脱离他的罗网。(2 TIMOTHY 2:24-26) + +#实战 + +通过前面的学习,已经掌握了python的基本内容,不少读者可能此时已经跃跃欲试,迫切地想用已经掌握的技术去搞点什么东西。 + +本季就是要出点一些实战的东西。 + +首先声明,因为仍然是教程,所以在实战中的所有例子,可能举例真正的工程代码要求还有一定的举例,比如可能没有非常优化、或者某些语句和方法使用还有进一步推敲之处。也盼望读者能够指出不足,必改正。 + +------ + +[总目录](./index.md)   |   [上节:电子表格](./234.md)   |   [下节:网站技术概述](./301.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index b89c737..fcb475d 100644 --- a/index.md +++ b/index.md @@ -101,6 +101,8 @@ #第叁季 实战 +0. [引](./300.md) + ##第捌章 用Tornado做网站 ##第五部分:科学计算 From e60bf921100ca09f85008cbaf884e4ac93dd0a48 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 13 May 2015 10:36:32 +0800 Subject: [PATCH 057/417] prepare for website --- 300.md | 2 +- 301.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.md | 2 ++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 301.md diff --git a/300.md b/300.md index c3c80cc..1f86d34 100644 --- a/300.md +++ b/300.md @@ -10,6 +10,6 @@ ------ -[总目录](./index.md)   |   [上节:电子表格](./234.md)   |   [下节:网站技术概述](./301.md) +[总目录](./index.md)   |   [上节:电子表格](./234.md)   |   [下节:为做网站而准备](./301.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/301.md b/301.md new file mode 100644 index 0000000..e55d4c3 --- /dev/null +++ b/301.md @@ -0,0 +1,104 @@ +>圣经都是神所默示的,于教训、督责、使人归正、教导人学义都是有益的,叫属神的人得以完全,预备行各样的善事。(2 TIMOTHY 3:16-17) + +#为做网站而准备 + +作为一个程序猿一定要会做网站。这也不一定吧,貌似是,但是,如果被人问及此事,如果说自己不会,的确羞愧难当呀。所以,本教程要讲一讲如何做网站。 + +>推荐阅读:[History of the World Wide Web](http://en.wikipedia.org/wiki/History_of_the_World_Wide_Web) + +首先,为自己准备一个服务器。这个要求似乎有点过分,作为一个普通的穷苦聊到的程序员,哪里有铜钿来购买服务器呢?没关系,不够买服务器也能做网站,可以购买云服务空间或者虚拟空间,这个在网上搜搜,很多。如果购买这个的铜钿也没有,还可以利用自己的电脑(这总该有了)作为服务服务器。我就是利用一台装有ubuntu操作系统的个人电脑作为本教程的案例演示服务器。 + +然后,要在这个服务器上做一些程序配置。一些必备的网络配置这里就不说了,比如我用的ubuntu系统,默认情况都有了。如果读者遇到一些问题,可以搜一下,网上资料多多。另外的配置就是python开发环境,这个应该也有了,前面已经在用了。 + +接下来,要安装一个框架。本教程中制作网站的案例采用tornado框架。 + +在安装这个框架之前,先了解一些相关知识。 + +##开发框架 + +对框架的认识,由于工作习惯和工作内容的不同,有很大差异,这里姑且截取[维基百科中的一种定义](http://zh.wikipedia.org/wiki/%E8%BB%9F%E9%AB%94%E6%A1%86%E6%9E%B6),之所以要给出一个定义,无非是让看官有所了解,但是是否知道这个定义,丝毫不影响后面的工作。 + +>软件框架(Software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。 + +>框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。 + +>简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说就是使用别人搭好的舞台,你来做表演。 + +我比较喜欢最后一句的解释,别人搭好舞台,我来表演。这也就是说,如果在做软件开发的时候,能够减少工作量。就做网站来讲,其实需要做的事情很多,但是如果有了开发框架,很多底层的事情就不需要做了(都有哪些底层的事情呢?读者能否回答?)。 + +有高手工程师鄙视框架,认为自己编写的才是王道。这方面不争论,框架是开发中很流行的东西,我还是固执地认为用框架来开发,更划算。 + +##python框架 + +有人说php(什么是php,严肃的说法,这是另外一种语言,更高雅的说法,是某个活动的汉语拼音简称)框架多,我不否认,php的开发框架的确很多很多。不过,python的web开发框架,也足够使用了,列举几种常见的web框架: + +- Django:这是一个被广泛应用的框架。在网上搜索,会发现很多公司在招聘的时候就说要会这个。框架只是辅助,真正的程序员,用什么框架,都应该是根据需要而来。当然不同框架有不同的特点,需要学习一段时间。 +- Flask:一个用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。 +- Web2py:是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。 +- Bottle: 微型Python Web框架,遵循WSGI,说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。 +- Tornado:全称是Tornado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。 +- webpy: 轻量级的Python Web框架。webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。 + +说明:以上信息选自:http://blog.jobbole.com/72306/ ,这篇文章中还有别的框架,由于不是web框架,我没有选摘,有兴趣的去阅读。 + +##Tornado + +本教程中将选择使用Tornado框架。此前有朋友建议我用Django,首先它是一个好东西。但是,我更愿意用Tornado,为什么呢?因为......,看下边或许是理由,或许不是。 + +Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架以开源软件形式开放给大众。看来Tornado的出身高贵呀,对了,某国可能风闻有Facebook,但是要一睹其芳容,还要努力。 + +用哪个框架,一般是要结合项目而定。我之选用Tornado的原因,就是看中了它在性能方面的优异表现。 + +Tornado的性能是相当优异的,因为它试图解决一个被称之为“C10k”问题,就是处理大于或等于一万的并发。一万呀,这可是不小的量。(关于C10K问题,看官可以浏览:[C10k problem](http://en.wikipedia.org/wiki/C10k_problem)) + +下表是和一些其他Web框架与服务器的对比,供看官参考(数据来源: [https://developers.facebook.com/blog/post/301](https://developers.facebook.com/blog/post/301) ) + +条件:处理器为 AMD Opteron, 主频2.4GHz, 4核 + +|服务| 部署 | 请求/每秒| +|----|-------|-----------| +|Tornado| nginx, 4进程|8213| +|Tornado|1个单线程进程|3353| +|Django|Apache/mod_wsgi|2223| +|web.py|Apache/mod_wsgi|2066| +|CherryPy|独立|785| + +看了这个对比表格,还有什么理由不选择Tornado呢? + +就是它了——**Tornado** + +##安装Tornado + +Tornado的官方网站:[http://www.tornadoweb.org](http://www.tornadoweb.org/en/latest/) + +我在自己电脑中(是我目前使用的服务器),用下面方法安装,只需要一句话即可: + + pip install tornado + +这是因为Tornado已经列入PyPI,因此可以通过 pip 或者 easy_install 来安装。 + +如果不用这种方式安装,下面的页面中有可以供看官下载的最新源码版本和安装方式:[https://pypi.python.org/pypi/tornado/](https://pypi.python.org/pypi/tornado/) + +此外,在github上也有托管,看官可以通过上述页面进入到github看源码。 + +我没有在windows操作系统上安装过这个东西,不过,在官方网站上有一句话,可能在告诉读者一些信息: + +>Tornado will also run on Windows, although this configuration is not officially supported and is recommended only for development use. + +特别建议,在真正的工程中,网站的服务器还是用Linux比较好,你懂得(吗?)。 + +##技术准备 + +除了做好上述准备之外,还要有点技术准备: + +- HTML +- CSS +- JavaScript + +我们在后面实例中,不会搞太复杂的界面和JavaScript(JS)操作,所以,只需要基本知识即可。 + +------ + +[总目录](./index.md)   |   [上节:实战-引](./300.md)   |   [下节:分析Hello,World](./302.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/index.md b/index.md index fcb475d..d5db7d0 100644 --- a/index.md +++ b/index.md @@ -105,6 +105,8 @@ ##第捌章 用Tornado做网站 +1. [为做网站而准备](./301.md)==>开发框架,python的常用web框架,tornado框架介绍和安装 + ##第五部分:科学计算 ##附:网络文摘 From 35672ff55080949a4ceb7272b846994387d006dd Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 13 May 2015 21:17:15 +0800 Subject: [PATCH 058/417] hello --- 301.md | 2 +- 302.md | 205 ++++++++++++++++++++++++++++++++++++++++++++++ 3code/hello.py | 22 +++++ 3images/30201.png | Bin 0 -> 13218 bytes 3images/30202.png | Bin 0 -> 120747 bytes index.md | 1 + 6 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 302.md create mode 100644 3code/hello.py create mode 100644 3images/30201.png create mode 100644 3images/30202.png diff --git a/301.md b/301.md index e55d4c3..41ff144 100644 --- a/301.md +++ b/301.md @@ -99,6 +99,6 @@ Tornado的官方网站:[http://www.tornadoweb.org](http://www.tornadoweb.org/e ------ -[总目录](./index.md)   |   [上节:实战-引](./300.md)   |   [下节:分析Hello,World](./302.md) +[总目录](./index.md)   |   [上节:实战-引](./300.md)   |   [下节:分析Hello](./302.md) 如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/302.md b/302.md new file mode 100644 index 0000000..406929f --- /dev/null +++ b/302.md @@ -0,0 +1,205 @@ +>As he walked by the sea of Galilee, he saw two brothers, Simon, who is called Peter, and Andrew his brother, casting a net into the sea--for they were fishermen. And he said to them,"Follow me, and I will make you fish for people." Immediately they left their nets and followed him.(MATTHEW 5:18-20) + +#分析Hello + +打开你写python代码用的编辑器,不要问为什么,把下面的代码一个字不差地录入进去,并命名保存为hello.py(目录自己任意定)。 + + #!/usr/bin/env python + #coding:utf-8 + + import tornado.httpserver + import tornado.ioloop + import tornado.options + import tornado.web + + from tornado.options import define, options + define("port", default=8000, help="run on the given port", type=int) + + class IndexHandler(tornado.web.RequestHandler): + def get(self): + greeting = self.get_argument('greeting', 'Hello') + self.write(greeting + ', welcome you to read: www.itdiffer.com') + + if __name__ == "__main__": + tornado.options.parse_command_line() + app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) + http_server = tornado.httpserver.HTTPServer(app) + http_server.listen(options.port) + tornado.ioloop.IOLoop.instance().start() + +进入到保存hello.py文件的目录,执行: + + $ python hello.py + +用python运行这个文件,其实就已经发布了一个网站,只不过这个网站太简单了。 + +接下来,打开浏览器,在浏览器中输入:http://localhost:8000,得到如下界面: + +![](./3images/30201.png) + +我在ubuntu的shell中还可以用下面方式运行: + + $ curl http://localhost:8000/ + Hello, welcome you to read: www.itdiffer.com + + $ curl http://localhost:8000/?greeting=Qiwsir + Qiwsir, welcome you to read: www.itdiffer.com + +此操作,读者可以根据自己系统而定。 + +恭喜你,迈出了决定性一步,已经可以用Tornado发布网站了。在这里似乎没有做什么部署,只是安装了Tornado。是的,不需要多做什么,因为Tornado就是一个很好的server,也是一个开发框架。 + +下面以这个非常简单的网站为例,对用tornado做的网站的基本结构进行解释。 + +##WEB服务器工作流程 + +任何一个网站都离不开Web服务器,这里所说的不是指那个更计算机一样的硬件设备,是指里面安装的软件,有时候初次接触的看官容易搞混。就来伟大的[维基百科都这么说](http://zh.wikipedia.org/wiki/%E6%9C%8D%E5%8A%A1%E5%99%A8): + +>有时,这两种定义会引起混淆,如Web服务器。它可能是指用于网站的计算机,也可能是指像Apache这样的软件,运行在这样的计算机上以管理网页组件和回应网页浏览器的请求。 + +在具体的语境中,看官要注意分析,到底指的是什么。 + +关于Web服务器比较好的解释,推荐看看百度百科的内容,我这里就不复制粘贴了,具体可以点击连接查阅:[WEB服务器](http://baike.baidu.com/view/460250.htm) + +在WEB上,用的最多的就是输入网址,访问某个网站。全世界那么多网站网页,如果去访问,怎么能够做到彼此互通互联呢。为了协调彼此,就制定了很多通用的协议,其中http协议,就是网络协议中的一种。关于这个协议的介绍,网上随处就能找到,请自己google. + +网上偷来的[一张图](http://kenby.iteye.com/blog/1159621)(从哪里偷来的,我都告诉你了,多实在呀。哈哈。),显示在下面,简要说明web服务器的工作过程 + +![](./3images/30202.png) + +偷个彻底,把原文中的说明也贴上: + +1. 创建listen socket, 在指定的监听端口, 等待客户端请求的到来 +2. listen socket接受客户端的请求, 得到client socket, 接下来通过client socket与客户端通信 +3. 处理客户端的请求, 首先从client socket读取http请求的协议头, 如果是post协议, 还可能要读取客户端上传的数据, 然后处理请求, 准备好客户端需要的数据, 通过client socket写给客户端 + +##引入模块 + + import tornado.httpserver + import tornado.ioloop + import tornado.options + import tornado.web + +这四个都是Tornado的模块,在本例中都是必须的。它们四个在一般的网站开发中,都要用到,基本作用分别是: + +- tornado.httpserver:这个模块就是用来解决web服务器的http协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado的非阻塞、单线程的特点在这个模块中体现。 +- tornado.ioloop:这个也非常重要,能够实现非阻塞socket循环,不能互通一次就结束呀。 +- tornado.options:这是命令行解析模块,也常用到。 +- tornado.web:这是必不可少的模块,它提供了一个简单的Web框架与异步功能,从而使其扩展到大量打开的连接,使其成为理想的长轮询。 + +读者看到这里可能有点莫名其妙,对一些属于不理解。没关系,你可以先不用管它,如果愿意管,就把不理解属于放到google立面查查看。一定要硬着头皮一字一句地读下去,随着学习和实践的深入,现在不理解的以后就会逐渐领悟理解的。 + +还有一个模块引入,是用from...import完成的 + + from tornado.options import define, options + define("port", default=8000, help="run on the given port", type=int) + +这两句就显示了所谓“命令行解析模块”的用途了。在这里通过`tornado.options.define()`定义了访问本服务器的端口,就是当在浏览器地址栏中输入`http:localhost:8000`的时候,才能访问本网站,因为http协议默认的端口是80,为了区分,我在这里设置为8000,为什么要区分呢?因为我的计算机或许你的也是,已经部署了别(或许是Nginx、Apache)服务器了,它的端口是80,所以要区分开(也可能是故意不用80端口),并且,后面我们还会将tornado和Nginx联合起来工作,这样两个服务器在同一台计算机上,就要分开喽。 + +##定义请求-处理程序类 + + class IndexHandler(tornado.web.RequestHandler): + def get(self): + greeting = self.get_argument('greeting', 'Hello') + self.write(greeting + ', welcome you to read: www.itdiffer.com') + +所谓“请求处理”程序类,就是要定义一个类,专门应付客户端(就是你打开的那个浏览器界面)向服务器提出的请求(这个请求也许是要读取某个网页,也许是要将某些信息存到服务器上),服务器要有相应的程序来接收并处理这个请求,并且反馈某些信息(或者是针对请求反馈所要的信息,或者返回其它的错误信息等)。 + +于是,就定义了一个类,名字是IndexHandler,当然,名字可以随便取了,但是,按照习惯,类的名字中的单词首字母都是大写的,并且如果这个类是请求处理程序类,那么就最好用Handler结尾,这样在名称上很明确,是干什么的。 + +类IndexHandler继承`tornado.web.RequestHandler`,其中再定义`get()`和`post()`两个在web中应用最多的方法的内容(关于这两个方法的详细解释,可以参考:[HTTP GET POST的本质区别详解](https://github.com/qiwsir/ITArticles/blob/master/Tornado/DifferenceHttpGetPost.md),作者在这篇文章中,阐述了两个方法的本质)。 + +在本例中,只定义了一个`get()`方法。 + +用`greeting = self.get_argument('greeting', 'Hello')`的方式可以得到url中传递的参数,比如 + + $ curl http://localhost:8000/?greeting=Qiwsir + Qiwsir, welcome you to read: www.itdiffer.com + +就得到了在url中为greeting设定的值Qiwsir。如果url中没有提供值,就是Hello. + +官方文档对这个方法的描述如下: + +>RequestHandler.get_argument(name, default=, []strip=True) + +>Returns the value of the argument with the given name. + +>If default is not provided, the argument is considered to be required, and we raise a MissingArgumentError if it is missing. + +>If the argument appears in the url more than once, we return the last value. + +>The returned value is always unicode. + +接下来的那句`self.write(greeting + ',weblcome you to read: www.itdiffer.com)'`中,`write()`方法主要功能是向客户端反馈信息。也浏览一下官方文档信息,对以后正确理解使用有帮助: + +>RequestHandler.write(chunk)[source] + +>Writes the given chunk to the output buffer. + +>To write the output to the network, use the flush() method below. + +>If the given chunk is a dictionary, we write it as JSON and set the Content-Type of the response to be application/json. (if you want to send JSON as a different Content-Type, call set_header after calling write()). + +##main()方法 + +`if __name__ == "__main__"`,这个方法跟以往执行python程序是一样的。 + +`tornado.options.parse_command_line()`,这是在执行tornado的解析命令行。在tornado的程序中,只要import模块之后,就会在运行的时候自动加载,不需要了解细节,但是,在main()方法中如果有命令行解析,必须要提前将模块引入。 + +##Application类 + +下面这句是重点: + + app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) + +将tornado.web.Application类实例化。这个实例化,本质上是建立了整个网站程序的请求处理集合,然后它可以被HTTPServer做为参数调用,实现http协议服务器访问。Application类的`__init__`方法参数形式: + + def __init__(self, handlers=None, default_host="", transforms=None,**settings): + pass + +在一般情况下,handlers是不能为空的,因为Application类通过这个参数的值处理所得到的请求。例如在本例中,`handlers=[(r"/", IndexHandler)]`,就意味着如果通过浏览器的地址栏输入根路径(`http://localhost:8000`就是根路径,如果是`http://localhost:8000/qiwsir`,就不属于根,而是一个子路径或目录了),对应着就是让名字为IndexHandler类处理这个请求。 + +通过handlers传入的数值格式,一定要注意,在后面做复杂结构的网站是,这里就显得重要了。它是一个list,list里面的元素是tuple,tuple的组成包括两部分,一部分是请求路径,另外一部分是处理程序的类名称。注意请求路径可以用正则表达式书写(关于正则表达式,后面会进行简要介绍)。举例说明: + + handlers = [ + (r"/", IndexHandlers), #来自根路径的请求用IndesHandlers处理 + (r"/qiwsir/(.*)", QiwsirHandlers), #来自/qiwsir/以及其下任何请求(正则表达式表示任何字符)都由QiwsirHandlers处理 + ] + +**注意** + +在这里我使用了`r"/"`的样式,意味着就不需要使用转义符,r后面的都表示该符号本来的含义。例如,\n,如果单纯这么来使用,就以为着换行,因为符号“\”具有转义功能(关于转义详细阅读[《字符串(1)》](./106.md)),当写成`r"\n"`的形式是,就不再表示换行了,而是两个字符,\和n,不会转意。一般情况下,由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。 + +关于Application类的介绍,告一段落,但是并未完全讲述了,因为还有别的参数设置没有讲,请继续关注后续内容。 + +##HTTPServer类 + +实例化之后,Application对象(用app做为标签的)就可以被另外一个类HTTPServer引用,形式为: + + http_server = tornado.httpserver.HTTPServer(app) + +HTTPServer是tornado.httpserver里面定义的类。HTTPServer是一个单线程非阻塞HTTP服务器,执行HTTPServer一般要回调Application对象,并提供发送响应的接口,也就是下面的内容是跟随上面语句的(options.port的值在IndexHandler类前面通过from...import..设置的)。 + + http_server.listen(options.port) + +这种方法,就建立了单进程的http服务。 + +请看官牢记,如果在以后编码中,遇到需要多进程,请参考官方文档说明:http://tornado.readthedocs.org/en/latest/httpserver.html#http-server + +##IOLoop类 + +剩下最后一句了: + + tornado.ioloop.IOLoop.instance().start() + +这句话,总是在`__main()__`的最后一句。表示可以接收来自HTTP的请求了。 + +以上把一个简单的hello.py剖析。想必读者对Tornado编写网站的基本概念已经有了。 + +如果一头雾水,也不要着急,以来将上面的内容多看几遍。对整体结构有一个基本了解,不要拘泥于细节或者某些词汇含义。然后即继续学习。 + +------ + +[总目录](./index.md)   |   [上节:为做网站而准备](./301.md)   |   [下节:用tornado做网站(1)](./303.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/3code/hello.py b/3code/hello.py new file mode 100644 index 0000000..0b7e126 --- /dev/null +++ b/3code/hello.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# coding=utf-8 + +import tornado.httpserver +import tornado.ioloop +import tornado.options +import tornado.web + +from tornado.options import define, options +define("port", default=8000, help="run on the given port", type=int) + +class IndexHandler(tornado.web.RequestHandler): + def get(self): + greeting = self.get_argument('greeting', 'Helloi World') + self.write(greeting + '\nwelcome you to read: www.itdiffer.com') + +if __name__ == "__main__": + tornado.options.parse_command_line() + app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) + http_server = tornado.httpserver.HTTPServer(app) + http_server.listen(options.port) + tornado.ioloop.IOLoop.instance().start() diff --git a/3images/30201.png b/3images/30201.png new file mode 100644 index 0000000000000000000000000000000000000000..57866676bd84b1e8b109bc9c48f20f283e24f79f GIT binary patch literal 13218 zcmeHu_g7O}+bxLYSO5{E3MjpbfOIe(>AeP|E4{bSOF%jFru2@~(2){)5kWdZzz_)~ zNDIA%BtRhCocFtbz<0;EKfW0w$=EA9*=s#zK65^6Cr(dCmGU0*Ju)&fN_90Q12Qu5 zLekUyuN$P1cE-Fz(i;Wnjk?iafBm)aM|XvEc-KqK6huZwHTdt7JVTI*g^cVenYz;7 zMuGYJOF^Nu_QX3!hvMqFFSo-`>1-|O1eebPY0CQjw|-b|ytO>?w+v9Wn6o^*h4Aaq zqj`L+^x@;jr)?1oKI37~*Ttv3c@@rL;!}qy&ToRtD4&1niAJo;u&nF#73}GMqG0Y$TT?Vo3n-AIt?tkD?KiH0o72WK(nf^s7q_(;m zXU#FQ?OR=~k?MPSb}UDHVVYUMlQs7Pzu$7 zb#SSh-K7b7^)oZ#QToHrb7qzH%c4VE>IOgwKEA-;U;k(Vtlucfs{4rC{1$+I=x!$1 zGSBQd8C)E2xUA)xpk)Be0O{m2iWZcu2{;bMcA3@T-fko^YUq_@w98?U6!kvpsV$?i zw6;PVVq(uF{Rb|vDy8huy<*A8EiUw+T^ax9I@@b%qvwvxb?;JNsT=z%8xiHy z!!%iY83~Cx-J)0dHHkDdXbU(J!X;WUw`UHu!H5c~YXKj-GsA%O$areEg|O-mw0N`c zKzvE4z#q6dAUOQ|nMXP@{RmkK@Q~AUK?6KT_cQsRs^CTcFJ=1NIvUvC24go_W5{KS z=4R`R;zGdVw{VQXK#^sMk;m26)ke%{Sy!bi;$EIP6=wj*hqBgN-9|}Xju)co(`1-A zRizCw*x57R-7}ZrN5ABZU4K$CIlbO~c_Mguc`1#aTyuT?Z*B_SYJFGR#0E zL{SI8`RYr5`D-wOL?*KymHQx~_5UUC6licGrOIh2Xj_=7^gd3!J1TE zom-GLz?f#?D_hXz=cAJ!n_b3g+^)J98~Zjv8EU>7)IMz*XV3u(E3|HK?KCg**C@Mw zKgycXQu(r=h&#lR3ho(>$q5LEN-V@RFccDI;X`$Y3V7IaL0%ua&{r5#5kvVEQ6xMh zP-|jZS={=qAqOp5`&Q9Z=${0efb%|LPp1;kQ2zf6G|x_5Od%i5_dK8PLH)k<+qO>Q z5!=OFi#;|{HOUdH~|9M#z2){oi^xJUzshA4xNf4T%kNx5M zcl8I%qBa&AN=7}~dk)Dt!FcVQ54Dkg`nJo}0n1}oL^}mu+x0JUg@JZTiT+$+{=8Zt z*Kwx`j%_X5zcQ~{|HO zSEnHsnGhD>>n$w+aP&n%@E7HCar{!YGsm)p)r-~S`rsi({)|b&q>widtHrU&ya`C* z2BC6yy=05Ra2-tI4lj{z*J0b-06-tYvF{aVbE0{cc9!ZbP#Nx!qN|pelu%P&eJ;Gx~Kdv6Aq5}ClX;u34K``A`KA<@l1GBzPi2~ z2~_X9-c90H3E5tjC<31u_4>`#E*NMhIv1fG0Z@26D~s+0zDIaqZ$}3zq#qZXoAQ)} zI{ak4Hshu5jP;>f$wzJW@Rt~V0%%HCONyoqEgX8$vEc(dyngvi;isu3%fl*1t$PQe zJ1}Qk#mR1)Lk3Tg;Ee(gPogkytaE`NY{`5lEAYHb)U>$U4V{Vy1QC0llO{anhHrh2 zuCf=ILeYp48>XoKGO3Q=wf*Rq?`rvNM1PjOL)Jid0x&c9gw4GA{{ABsfCr&!9oc>p z&~ftf4>Kq@MXkpoXv-;5H0)i;XONDa4txFtSU#|2$V1*-N2{rfTE_vvCT*~^6>#*Q zlTzbiV{>MGQs-0dq!`uk>&tSKhY}FH+F{|S$v62HLF+*ifnd!F5?tf=+gz(_94B+j z`84$O^z4)d74VB|LB_wrzW)kCDo9F7a!HqU*G`zXsLOVuqg@s5wZpB-D5p&Ke*{&drT(BImyi>xyCUyk4ka z*O9>LzE`q)kff;*KWjXci%cI$jJ>42c(9eVqx!4Q`W|6-O_2VO{p$C(h)?4cQ+M2 z9dJqb&gXs6_XJHZ@Ov4bZ88mJ6{u?yi@irjk7ery_ZrI$7NOy}E!R2t>kG8IqF6?c z9BXOClETwZGCEo2{7=QyP@#{rpK;A-5yop_ohP^N#XfKWOXd7KQobSC(ffTzzg|4r zc~+3FoUa8l_wV0ZDp#%Q`CNREyKckCOu2kzCFKLi-C4XNSvazfu!=JR_IK~g&^1MCBoNXuayUE+6WAz|BaH8B@(0hux zx}M4dlegNqzS)-cc}M8VdyOB2s+pZ|M}Uhpe1i+D8fLe#NZt~i22kG^7b0qTy_0Be zVJin@nN<~G5x|V^RGRs!RVo@_P%h|$GWd8=w+-25y?5P9A{4T2o1`-&; zU4PS!Se7M7{iJbctxI{!l6x?gmb2V$Tq-J)+@$pVKjzkN4z)Aeg^R+VLP zMJFsXc&>ZEkA@ePni;uikbR=}F+D4< zN~%m%fQhZ4X=6r|qhIq&)&*}QERJSA*J=rMj? z1xpo1(V5-u#G8*_h5oHUFKl6CV#2`22F60Rg(D0wk%jUo{u+ zn_BORNFNzdo1Z7b-K(`aQ2XB3=C~_x#xB$&cMLn;i#j~74)!n^>A$vpRiNS}Tk!t< zdr{HG>gpX|S!Ml}*}stIH+{msJ(94#e0IF~WvyBRtj~1!0?NWrufYzFGWiuv)mdVm zmrBP`vg59qIYfC#-+#aF%1vK?OTsYZ&O44 zXm;Av+^I8hjNYxwm}}49%RW^zJKtFK>mM-uSQekEG9#(YZJ3=S5Pso-hfmK>Yc0H( zs@u#5B_RA{G~4PIG}SG?C;6Nc4JqxYB*bBtCE~QFyS>D{nil=h?h+o~pI^5q8amou zHkmZ6l;@!cLZF$A(V+`lmSxm3or0|3uN8L5V59F+9nGkuf|o+IPD>%?xt&YimZ^Wk zAxRyt{^b2=M#U9K%hv{yKG|D3V1)lj*_~BQ(KzG5Ck3qXP*Drcj5TPAy*Qts&P%v) zTSr@>VE?V<)}6LRA59OBgZ(xX+mj~~GDTwcW2xnuo@`REu$y1PqzWxeI-McgBqSuX9HzDUywgvZZnJ8up;Aqo<){6u=#tve=}E2=XB96SC%Lan(z3Yi1=WUG z*Sen=^O8lsTWS7}|MHH4QJvG;CaM?91ZXc2W@7GJA(bzVUbWdj7}s*LOdX3=6Z^G4 z7PgNugNummUI0*_5bEaj9RV80L{Z1%0958}s!pjND8HjsC&Ta9=`3AFD0UKl*f6>+ zS8l%f4}|Ctj9)7kQE=o0U4Axb@^8t%kQ zZtEWFeXf~1+>W{znD%-V6}lN0UJLp#f6dWfSJb+T4MkaU*Yj|H4v^d7?zQ~J933Z( z9}@w;oh*eG2|Q+r;cvY@W5OpVO1$8(&1y{1^$fNpe!K?n>ccvUTrcQ1V1`JrrbLK^ z>@M-}mOxy5eCJ^=p~e3PV?tb9&1B9Sx806^MQLF7t>1Q(Yx+^f!0ax-F<>t}L_b?2VeL(a(j2 z%gw5~I$YbnX4Kj&QHWl8KEZp4-lK`^lIlgjxUiZ#2jR;am21xV%BWClw)8My(`ZQC z)NW^)<`c(7!hTkD3hu2wuGQ5wd8>(J5Dp824(gvxQa|pO$qEn+ z5|Odqebhzj0$6@_<2VVc$C$6qe`%m-e?I5e*4K;)2~8UkUt7FGhrS}n^3jz3W0pMX@^=L* z*au<%r!dk32n14JZxpYcpVKGgEFu`m1E+~s$ip-tSzm1FrP@%d4&T$#7;PXY~HM93HI70Zeu%J@83N7C5v2q z24DC31&2@NVlVBpEGw3pW2LN*zp%!LnGCq}Lg{G&un0Al$8+0Ui1v6%@{S6n(Q>Pj zYUKW4#lQi79C`F(xO@9bTxDrEYEU!hehSDkw`vfUFS;W440jY(D5d^5^zS%ST=JRX#B zOf4%&S*=gq>@9Q+jbvQQ5188doSNF?fOW~Jx!tqe%>O7NX47f5H-FD}ED5J#UV2p_ z+81`*C*o-DXOh0zz>Se)@Ne(4@oRnDx^AVq;1KgDJy4R(MCy7kiWTXVN1%Y)e#(MC zASp~BLuKU+;uXP8nFnF1`N?A?&ff2^qPlwC?EvuZotxX@m%k$~aQiGwOxsjK_#8d= zScC#^faUlmOl*0RnR|+lE5(XUF1^9<$kqG5H;!zHe9<8=2eMn%et0o7x9D=~?*xQ`JLo zAt$qVS)i0x%XiCBV|Rx|Y&KQ#;|(TGSYF?!pEmqjHiqmPMR z0wRk@_)_2`C~cTZ$Ijw(i~x)8J6^9jRXH!cOWL;m5>r=8r|7Z*)MJlZTZV>)XnA$gGczS$zI^!khfQ2^@&OWB z)7N(`|b=z0xUN zuQToOVnCo}i_>(c-!5$JgnVVy)%&#>(43u>Y3}$zVk5#TuLpc}advhV5kbcBZ{3mY zl{Mj2r%&i;?JcO$x_AFRet#jWpkS%SL}chK7z`${Hg)wl|Bg{uf!spH!scY&RKCpG zcjE_!9~;xq z(1=xQK=5*N?=NU% z{`&0MvwoY#k)}}0q*My4++3KhQClk}_d)dSydL0tD=RBf@8I3LFV)q4exys)&0e@N z*TAcnnqP>B9EQ5@H{3*DE_n6{3kh{^=DK>c|GC{`)fbH2si@%LKsGy0E%$^F@Q2|W z877%oSq;{GR)pWu2+~yY3*|fAaTPoO00or6o#Y|MDdNR$!`j-~B#|hqKC|n4pI#_i zA*6N512LnQxp8`Wir<`ch2Dg9{N2zdC1WOxA%)2F^mKW7IjQ9E>K3MN%mHG|Ei6d1 z;aV|<3VX2BwS*jRx+I0x`sSut-Q4>6`W^Pr7reZ~S2M%x;oX79t0c$#{P{CS+!04| z;qmGZ5E|z0;v$x#WjmbQLpbQdUigFUNUMR5XNd&J7Vz`)&sJ#f!fQ>2>Em?=OJ zARO%OUN>qNyj2{dlEPLejIL{24&JS6i{0u#7mmYV#7oRnT54)EB@55EkG{S>syB>O zcH;PWc^&7Q?6FvEDi^DK;0tkaL-W%9cW>J~EJ@4p@;Z{qaAkcRp=p``aD#OWW+Qo! zjJ63N5Te#HFFoB(G!H5lxr@CxIy(CD$ou#E^*Z6w=6luNFCCYeIc({wp4k?W!+>tFEAhd(My*CU6ChY41 zu1@Q_4tAzXRqgHVEi9hUV0RIR*4Gy%@7}Gny8oLDh*H%Q!TR=+{nRf1ecAWlZ^F(A zhkc|=o+>BM-@17-&>V5RHf$ZVks){34I26MEF&Z1?p??5%cD$lkB;LZmN-5ho@jaS zz1NUg(&_oKegcAmnvmIy%*>1PbJED$x;c_CeQw$5)J)Q-kMvDVb95kb5FaI$*K%R> zQ{eo(rDet^Pxd^;wk=SBBvww8E$AB_Nv^IYnXi7f&YgaK`Mrm>_T+r^7Pd*qT!?-s z8}6b_%IW0f`i2I)e}sjhVYBb{48LK;qW^-s(l1hQa;hdz7&K_zO=kzUt zJSQioE|Zpq=5ucD4)|XS{k#2@Weq;xf!BaQpwiM(-2zz&o58=*M$7goOQ*M%pQ)5K z_V&IK657ijTUfFr%Sxx8-n>vqo}=}K@#^Hi1p>qNe(U#GHDHl+%8gQ_Jtm$hD{})I zn-JIc+El6wo~gN$n@FS?#|{$e>gDD2`t`TZoT_i$ydj|*)cUlts)}Dkr0uQHzHv`w zrCR33-;uYSbt!Kv_JOZj-R4)lq~qh`^K~Eu?zSWrDezJMom;nVnT4y$CGSSeQ8$^@ zvDONTi#L0sdZ}NXt&Du;^z7KkBqdouw^kDUJZZTkfM^n8R|q!RohSbmG|hq3Qt69U z>H4v_%r6OJ58l#k=pzo1VoE5JOg+_3xfeT!qGW&74fl;NY1y$CRgvuK*}vjnTV1WL zsUf{KH8r)g?=5xVd&3AV_X7g3BM_4tmhE6%t9|fiXKV zXTZ3zxw)Xa!2B!lyUtf?Y9I2u4@Zr0c%+TOR`pU|;(DI}oOhMv~QdP>{c$`&!X=bgZgA2v*4b|V$qc~orj zj0_AAWm0jz?2o)d3TbY20byZQNw>E(6f+SK5$+4EkLl>RxVcFIb+8nGl3-4%s;Uw+ zsTUFwx*P@&`x)=wzt5r&eA*p^F#_(xYqCfwN-{%A3UA3d2A%Rm#vqj|Z?ZyIkL4F4 zv#P+|NsxN`9FRq(atEj39#+QVpJ(HBgjR`jVl8r{2QIS*vR#>D? zI`pzdXU4ufVEc?LNqr_?21La!yPm!=ew(`RrE_YV6UpMkOLw}shPXqngS+7_3V}x} zRfdq3UHOk6Kcd=y|3jz?oMyMn#_wQ>&ex5pCjwRHUr+O|)n&H>`*T)Lc8V!N*6yg2uW-1cBa93^ z-7Q*)UHxGpb}kUQP~tZI5Tor3tVcDuP@a`bVrBS(Y-JV0?5!<$LI!Z5Ah^4T9Ua5ap3GB$OP2N&m@fA_)*Hi~h` zNNn8Hv-OVwA$m(gs5UoFcb5fAcYjpAB6}S|YG5VRk<>WsYFLMk`-iIkZZ6$pHs*&b zo+p^K!F~T2XmMj@_lXm6d$lQ^jmZ*p;VZ>N$xysQMz;L56PXKxaBy(M2o>@1z0!Yc zpl|8w?$jbB!^oL7E%MVQ`2qEIE@NK)!%_qkWOajVg+ngJiGu9x`bL2e*~5n=lw>#m zAsv%%OS!)#Xd=kTR^)A2QLHRvE7zP)KHd1g%1?=f?61G3ZPUj&~aItm|{+WnATZPy*yg z@VGAtdK^u0h>{ZOA7Q)?W0nJfl+gv=9&(qX1DpmFjJ6jey=#u{d>K8uwVBV`-wfZL zRHze1;I5YR6Mrmr{ZLU-N>;ocv&%$*fomb!fdl<1Y|NkO2N`Y2)d#MdsC&f#)R-re zqhIpR?R?vx|A9f_Y>JG%-F3E`eL+?g)48e%+PMEX*Ub|Wv=HA60=j2Q%3tlIxK=v( zx8^kdTJT_5JvLgvEc?F;30atpa?Q`;ImqBV>{Ez~4*g`}Z~RAUHZ?9XF?KAz| z`x%`t90jm|IviuxR!2O4@5$dm=VOp?Tdj25Iyj_e_#|g)DC(0nD#YqKbSYQ)xXjQ!Gs+|u3bc%lB z+nnM^~fmQxkMp~NtV_>g?6F#LBH+@~c( z5q6Mox8PzvFWQclG8bepSGdqh%!8#01{=6&sa7Z`CrkTki zpi>|6^aBS^c#gG^k;Qw%(8Vce&G4Dwj^EYVg;wY)Gyp(o9h~ov=Gzb?-IhRXL;x&1 z{O9*Z`IRxE@M^^f#-F6m{7C#hO!>gu50$pAC@mIgmi^5en5fx0^a{P40I)U(YV7 zNp;(IdG_PhC>qmGx9U|$)0>*O$9jH})}tL}H5%aKakZKJLL=NIJgq^Z@$gDjU^>DC zqmXB$3Y;<1?L#EHivOx3ggw;XyF!^m`Kjd#bY_4Z8LWr#&Fiz6=pCn(Jl=wQ(DKB0`FDf2-d3q-FQ zO!dU}x6buzA8Ek#dMmipumx%p8FSbH$v(Xm&W>q$<__ZpbJNCwuphfp+7F8V>D&A2 ztm$^#GF!3L(WYS8J`_~7a~jby3;>xFKto~f`jaA+a5==2@Pr|b2TzP zkSugw{KhYzh#Rhs{e$2loWG@o2IHec$DT-u_1i`?Vg!CrO~y?-yioGJ%c)qTuOOtP zR7R~y#S1r^t-N?kZn=oXTfYA->SbrVzHEs@ z4r`R5p_T@tgej{4O%*&OoUhCSVISjKr+$yc*S#}D!`64|15@fe0WjLpbd95u&vgd>vONJy zBnf=ZN>kEM3{ud4ZS;lUXZhNQOd``n!uy_E_>s)lscfqm#Tx2gN%e07xroulmcd+` zXFYv^j+1J;o$_lDIZKmebOa;XA7;j?baX6x9h0oaqbac?j~x6r0Jcg)ufwMxgEHPE z=%bT3>2=jwL)YwA?{b@+G@fW5Z|L52^hU>U@Pw!*X3~Tz|V$07{o3`_b;zdK>A>YDOkj4SKbb2{yuQsg35bMTj()&XIim zDx5A@zQz5p@SC6m4-3V>5cV^q;nKM%IMz{N8t@MdrjADzl$|qT_8uq?D?HQVp4+|) zC?YM(8yki&8v?iBPO&>5DV`zv-~71CD+x2R5yq$^m-JJfadD#e zdbFk4QEe(zR`Q>ZBG*Uv0_+jq2p zKy;4DRz{L4k_JUoVla54)e^Pw3Z(cE01aUNTiDvC;ByIYciVZ)B#N~rAlUj{LTAh3 zw`5!y=VAFPCCiHL>&bdn76y5+dzN0wr?|Wpsc*f9^HxgJeOFWQ>;c51ADFgNwHLIr zuup7(6)ZHAV7%|HxbnYY;+#wGceJ=}ELS(ZYkUS~?nhMoZna^k_qHk_W;v}{Kv}Q$ zKD&y4jEj9x%&&NTgw#deW%isN>OgvJmB!TXxbSe?gE3-%&#ajRVNdkI=|@NY<_q!C zy1mOOv0~SLmFI3IR|wiSvA!l?vmGkxBA4$S20i;p0ISS*92{awj@QoGQL8-~=wHFz z#$S>yJRvGHQH#CxbEQ9BS*1M%M#7u|yFbJx#+hiFx1UVcgZCxoqpzBWE6!;2k75IK zWaUUV6S$X75~3^px~w{62Hq%LWaslAUVioQF)9;8N(az^&)ZO3d9i%$!*wE_W_Z1i z$73Qc(pkFUfnk6B(6(BVME{F}<1dAGe)^=D@4xgk_okZO1R1(nHr}6?7E$lZEPC5| zm^HDBV)>rO%;sWTx6hL9L1x5RppROd%{^xlYX;YT82o?F`hQbA|FzeD?e)J9 k#{UhI|9@ff<(i@?@)IVfJ#3BiFB>v-WgVsZH}5|FA0(o{NB{r; literal 0 HcmV?d00001 diff --git a/3images/30202.png b/3images/30202.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0d960cbe8d6b0a719d65f2b1133535a531abe9 GIT binary patch literal 120747 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

Login

+
+

UserName:

+

Password:

+

+
+ + +这是一个很简单前端界面。要特别关注``,其目的在将网页的默认宽度(viewport)设置为设备的屏幕宽度(width=device-width),并且原始缩放比例为1.0(initial-scale=1),即网页初始大小占屏幕面积的100%。这样做的目的,是让在电脑、手机等不同大小的屏幕上,都能非常好地显示。 + +这种样式的网页,就是“自适应页面”。当然,自适应页面绝非是仅仅有这样一行代码就完全解决的。要设计自适应页面,也就是要进行“响应式设计”,还需要对CSS、JS乃至于其它元素如表格、图片等进行设计,或者使用一些响应式设计的框架。这个目前暂不讨论,读者可以网上搜索有关资料阅读。 + +>一提到要能够在手机上,读者是否想到了HTML5呢,这个被一些人热捧、被另一些人蔑视的家伙,毋庸置疑,现在已经得到了越来越广泛的应用。 + +>HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到符合当代的网络需求。广义论及HTML5时,实际指的是包括HTML、CSS和JavaScript在内的一套技术组合。 + +>响应式网页设计(英语:Responsive web design,通常缩写为RWD),又称为自适应网页设计、回应式网页设计。 是一种网页设计的技术做法,该设计可使网站在多种浏览设备(从桌面电脑显示器到移动电话或其他移动产品设备)上阅读和导航,同时减少缩放、平移和滚动。 + +如果要看效果,可以直接用浏览器打开网页,因为它是.html格式的文件。 + +###引入jQuery + +虽然完成了视觉上的设计,但是,如果点击那个login按钮,没有任何反应。因为它还仅仅是一个孤立的页面,这时候需要一个前端交互利器——javascript。 + +>对于javascript,不少人对它有误解,总认为它是从java演化出来的。的确,两个有相像的地方。但javascript和java的关系,就如同“雷峰塔”和“雷锋”的关系一样。详细读一读来自维基百科的诠释。 + +>JavaScript,一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页增加动态功能。然而现在JavaScript也可被用于网络服务器,如Node.js。 + +>在1995年时,由网景公司的布兰登·艾克,在网景导航者浏览器上首次设计实现而成。因为网景公司与昇阳公司合作,网景公司管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语义与Self及Scheme较为接近。 + +>为了获取技术优势,微软推出了JScript,与JavaScript同样可在浏览器上运行。为了统一规格,1997年,在ECMA(欧洲计算机制造商协会)的协调下,由网景、昇阳、微软和Borland公司组成的工作组确定统一标准:ECMA-262。因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。 + +但是,我更喜欢用jQuery,因为它的确让我省了不少事。 + +>jQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作。由约翰·雷西格(John Resig)在2006年1月的BarCamp NYC上发布第一个版本。目前是由Dave Methvin领导的开发团队进行开发。全球前10,000个访问最高的网站中,有65%使用了jQuery,是目前最受欢迎的JavaScript库。 + +在index.html文件中引入jQuery的方法有多种。 + +原则上将,可以在HTML文件的任何地方引入jQuery库,但是通常放置的地方在html文件的开头`...`中,或者在文件的末尾``以内。放在开头,如果所用的库比较大、比较多,在载入页面时时间相对长点。 + +第一种引入方法,是国际化的一种: + + + +这是直接从jQuery CDN(Content Delivery Network)上直接引用,好处在于如果这个库更新,你不用任何操作,就直接使用最新的了。但是,如果在你的网页中这么用了,如果在某个有很多自信的国家上网,并且没有梯子,会发现网页几乎打不开,就是因为连接上面那个地址的通道是被墙了。 + +当然,jQuery CDN不止一个,比如官方网站的: + + + +第二种引入方法,就是将jQuery下载下来,放在指定地方(比如,与自己网站在同一个存储器中,或者自己可以访问的另外服务器)。到官方网站([https://jqueryui.com/](https://jqueryui.com/))下载最新的库,然后将它放在已经建立的statics目录内,为了更清楚区分,可以在里面建立一个子目录js,jquery库放在js子目录里面。下载的时候,建议下载以min.js结尾的文件,因为这个是经过压缩之后,体积小。 + +我在`statics/js`目录中放置了下载的库,并且为了简短,更名为jquery.min.js。 + +本来可以用下面的方法引入: + + + +如果这样写,也是可以的。但是,考虑到tornado的特点,用下面方法引入,更具有灵活性: + + + +不仅要引入jquery,还需要引入自己写的js指令,所以要建立一个文件,我命名为script.js,也同时引用过来。虽然目前这个文件还是空的。 + + + +这里用的static_url是一个函数,它是tornado模板提供的一个函数。用这个函数,能够制定静态文件。之所以用它,而不是用上面的那种直接调用的方法,主要原因是如果某一天,将静态文件目录statics修改了,也就是不指定statics为静态文件目录了,定义别的目录为静态文件目录。只需要在定义静态文件目录那里修改(定义静态文件目录的方法请参看上一节),而其它地方的代码不需要修改。 + +###编写js + +先写一个测试性质的东西。 + +用编辑器打开statics/js/script.js文件,如果没有就新建。输入的代码如下: + + $(document).ready(function(){ + alert("good"); + $("#login").click(function(){ + var user = $("#username").val(); + var pwd = $("#password").val(); + alert("username: "+user); + }); + }); + +由于本教程不是专门讲授javascript或者jquery,所以,在js代码部分,只能一带而过,不详细解释。 + +上面的代码主要实现获取表单中id值分别为username和password所输入的值,alert函数的功能是把值以弹出菜单的方式显示出来。 + +##hanlers里面的程序 + +是否还记得在上一节中,在url.py文件中,做了这样的设置: + + from handlers.index import IndexHandler #假设已经有了 + + url = [ + (r'/', IndexHandler), + ] + +现在就去把假设有了的那个文件建立起来,即在handlers里面建立index.py文件,并写入如下代码: + + #!/usr/bin/env python + # coding=utf-8 + + import tornado.web + + class IndexHandler(tornado.web.RequestHandler): + def get(self): + self.render("index.html") + +当访问根目录的时候(不论输入localhost:8000,还是http://127.0.0.1:8000,或者网站域名),就将相应的请求交给了handlers目录中的index.py文件中的IndexHandler类的get()方法来处理,它的处理结果是呈现index.html模板内容。 + +`render()`函数的功能在于向请求者反馈网页模板,并且可以向模板中传递数值。关于传递数值的内容,在后面介绍。 + +上面的文件保存之后,回到handlers目录中。因为这里面的文件要在别处被当做模块引用,所以,需要在这里建立一个空文件,命名为`__init__.py`。这个文件非常重要。在[编写模块](./219.md)一节中,介绍了引用模块的方法。但是,那些方法有一个弊端,就是如果某个目录中有多个文件,就显得麻烦了。其实python已经想到这点了,于是就提供了`__init__.py`文件,只要在该目录中加入了这个文件,该目录中的其它.py文件就可以作为模块被python引入了。 + +至此,一个带有表单的tornado网站就建立起来了。读者可以回到上一级目录中,找到server.py文件,运行它: + + $ python server.py + Development server is running at http://127.0.0.1:8000 + Quit the server with Control-C + +如果读者在前面的学习中,跟我的操作完全一致,就会在shell中看到上面的结果。 + +打开浏览器,输入`http://localhost:8000`或者`http://127.0.0.1:8000`,看到的应该是: + +![](./3images/30403.png) + +这就是script.js中的开始起作用了,第一句是要弹出一个对话框。点击“确定”按钮之后,就是: + +![](./3images/30404.png) + +在这个页面输入用户名和密码,然后点击Login按钮,就是: + +![](./3images/30405.png) + +一个网站有了雏形。不过,当提交表单的反应,还仅仅停留在客户端,还没有向后端传递客户端的数据信息。请继续学习下一节。 + +------ + +[总目录](./index.md)   |   [上节:用tornado做网站(1)](./303.md)   |   [下节:用tornado做网站(3)](./305.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/3code/web/handlers/__init__.py b/3code/web/handlers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/3code/web/handlers/__init__.pyc b/3code/web/handlers/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..206447ed3df478898cc99f3a92e94e1bb2bcecfd GIT binary patch literal 162 zcmZSn%*&PhI4U%m0SXv_v;zS5S~qHm0AVgA_wgryoyNmP(g|$D40u#$+SsHcJ1z#TJToi)JO0EbY@fZ z1$4=L^PAakX2Z{;!P!UpP{8hlq_0TqDM3k}fCeBHPzHbk76B|mn2{U8JHQs;DeZAl z67}eZ`isug4avM!CB9B_RW@jTx(iB-N$d#$c71^xr2)iA#OZ>8B_O#b@wION3r}V% zKoG4Y;`G!G2y4D+RJpeC4P2jM1}SJdpNUy)W)W%dU?*hBO1CJNYk8xKRg215`8ZBw z;&S8A++l81t>*U|S7{~B3tggIzJl1X-r?7PHJT z(JX6qxoXIbx!{-2-;;`|Kkyp#i*Oa?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("

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 literal 0 HcmV?d00001 diff --git a/index.md b/index.md index d5db7d0..2ff0b0d 100644 --- a/index.md +++ b/index.md @@ -106,6 +106,7 @@ ##第捌章 用Tornado做网站 1. [为做网站而准备](./301.md)==>开发框架,python的常用web框架,tornado框架介绍和安装 +2. [分析Hell](./302.md)==>发布tornado做的网站,并剖析基本结构 ##第五部分:科学计算 From 1a52639d3d9bd0d522e57a0c4aa12c32f9074c78 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Wed, 13 May 2015 21:18:53 +0800 Subject: [PATCH 059/417] hello --- index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.md b/index.md index 2ff0b0d..28cb39d 100644 --- a/index.md +++ b/index.md @@ -106,7 +106,7 @@ ##第捌章 用Tornado做网站 1. [为做网站而准备](./301.md)==>开发框架,python的常用web框架,tornado框架介绍和安装 -2. [分析Hell](./302.md)==>发布tornado做的网站,并剖析基本结构 +2. [分析Hello](./302.md)==>发布tornado做的网站,并剖析基本结构 ##第五部分:科学计算 From 5ec99a334cf79cd2d59835d59b61f01e22ea64b6 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Thu, 14 May 2015 17:59:53 +0800 Subject: [PATCH 060/417] constructure --- 303.md | 180 ++++++++++++++++++++++++++++++++++++++ 3code/web/application.py | 17 ++++ 3code/web/application.pyc | Bin 0 -> 493 bytes 3code/web/server.py | 25 ++++++ 3code/web/url.py | 14 +++ 3code/web/url.pyc | Bin 0 -> 340 bytes 3images/30301.png | Bin 0 -> 13011 bytes index.md | 1 + 8 files changed, 237 insertions(+) create mode 100644 303.md create mode 100644 3code/web/application.py create mode 100644 3code/web/application.pyc create mode 100644 3code/web/server.py create mode 100644 3code/web/url.py create mode 100644 3code/web/url.pyc create mode 100644 3images/30301.png diff --git a/303.md b/303.md new file mode 100644 index 0000000..11ff95c --- /dev/null +++ b/303.md @@ -0,0 +1,180 @@ +>你要提醒众人,叫他们顺服作官的、掌权的,遵他的命,预备行各样的善事。不要毁谤,不要争竞,总要和平,向众人大显温柔。我们从前也是无知,悖逆,受迷惑,服侍各样私欲和宴乐,常存恶毒、嫉妒的心,是可恨的,又是彼此相恨。但到了神我们救主的恩慈和他向人所施的慈爱显明的时候,他便救了我们,并不是我们自己所行的义,乃是照着他的怜悯,藉着重生的洗和圣灵的更新。(TITUS 3:1-5) + +#用tornado做网站(1) + +从现在开始,做一个网站,当然,这个网站只能算是一个毛坯的,可能很简陋,但是网站的主要元素,它都会涉及到,读者通过此学习,能够了解网站的开发基本结构和内容,并且对前面的知识可以有综合应用。 + +##基本结构 + +下面是一个网站的基本结构 + +![](./3images/30301.png) + +**前端** + +这是一个不很严格的说法,但是在日常开发中,都这么说。在网站中,所谓前端就是指用浏览器打开之后看到的那部分,它是呈现网站传过来的信息的界面,也是用户和网站之间进行信息交互的界面。撰写前端,一般使用HTML/CSS/JS,当然,非要用python也不是不可以(例如上节中的例子,就没有用HTML/CSS/JS),但这势必造成以后维护困难。 + +MVC模式是一个非常好的软件架构模式,在网站开发中,也常常要求遵守这个模式。请阅读维基百科的解释: + +>MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 + +>MVC模式最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程式设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组: + +> - (控制器 Controller)- 负责转发请求,对请求进行处理。 +> - (视图 View) - 界面设计人员进行图形界面设计。 +> -(模型 Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。 + +所谓“前端”,就对大概对应着View部分,之所以说是大概,因为MVC是站在一个软件系统的角度进行划分的,上图中的前后端,与其说是系统部分的划分,不如严格说是系统功能的划分。 + +前端所实现的功能主要有: + +- 呈现内容。这些内容是根据url,由后端从数据库中提取出来的。前端将其按照一定的样式呈现出来。另外,有一些内容,不是后端数据库提供的,是写在前端的。 +- 用户与网站交互。现在的网站,这是必须的,比如用户登录。当用户在指定的输入框中输入信息之后,该信息就是被前端提交给后端,后端对这个信息进行处理之后,在一般情况下都要再反馈给前端一个处理结果,然后前端呈现给用户。 + + +**后端** + +这里所说的后端,对应着MVC中的Controller和Model的部分或者全部功能,因为在我们的图中,“后端”是一个狭隘的概念,没有把数据库放在其内。 + +不在这些术语上纠结。 + +在我们这里,后端就是用python写的程序。主要任务就是根据需要处理由前端发过来的各种请求,根据请求的处理结果,一方面操作数据库(对数据库进行增删改查),另外一方面把请求的处理结果反馈给前端。 + +**数据库** + +工作比较单一,就是面对后端的python程序,任其增删改查。 + +关于python如何操作数据库,在本教程的第贰季第柒章中已经有详细的叙述,请读者阅览。 + +##一个基本框架 + +上节中,显示了一个只能显示一行字的网站,那个网站由于功能太单一,把所有的东西都写到一个文件中。在真正的工程开发中,如果那么做,虽然不是不可,但开发过程和后期维护会遇到麻烦,特别是不便于多人合作。 + +所以,要做一个基本框架。以后网站就在这个框架中开发。 + +建立一个目录,在这个目录中建立一些子目录和文件。 + + /. + | + handlers + | + methods + | + statics + | + templates + | + application.py + | + server.py + | + url.py + +这个结构建立好,就摆开了一个做网站的架势。有了这个架势,后面的事情就是在这个基础上添加具体内容了。当然,还可以用另外一个更好听的名字,称之为设计。 + +依次说明上面的架势中每个目录和文件的作用(当然,这个作用是我规定的,读者如果愿意,也可以根据自己的意愿来任意设计): + +- handlers:我准备在这个文件夹中放前面所说的后端python程序,主要处理来自前端的请求,并且操作数据库。 +- methods:这里准备放一些函数或者类,比如用的最多的读写数据库的函数,这些函数被handlers里面的程序使用。 +- statics:这里准备放一些静态文件,比如图片,css和javascript文件等。 +- templates:这里放模板文件,都是以html为扩展名的,它们将直接面对用户。 + +另外,还有三个python文件,依次写下如下内容。这些内容的功能,已经在上节中讲过,只是这里进行分门别类。 + +**url.py**文件 + + #!/usr/bin/env python + # coding=utf-8 + """ + the url structure of website + """ + + import sys #utf-8,兼容汉字 + reload(sys) + sys.setdefaultencoding("utf-8") + + from handlers.index import IndexHandler #假设已经有了 + + url = [ + (r'/', IndexHandler), + ] + +url.py文件主要是设置网站的目录结构。`from handlers.index import IndexHandler`,虽然在handlers文件夹还没有什么东西,为了演示如何建立网站的目录结构,假设在handlers文件夹里面已经有了一个文件index.py,它里面还有一个类IndexHandler。在url.py文件中,将其引用过来。 + +变量url指向一个列表,在列表中列出所有目录和对应的处理类。比如`(r'/', IndexHandler),`,就是约定网站根目录的处理类是IndexHandler,即来自这个目录的get()或者post()请求,均有IndexHandler类中相应方法来处理。 + +如果还有别的目录,如法炮制。 + +**application.py**文件 + + #!/usr/bin/env python + # coding=utf-8 + + from url import url + + import tornado.web + import os + + settings = dict( + template_path = os.path.join(os.path.dirname(__file__), "templates"), + static_path = os.path.join(os.path.dirname(__file__), "statics") + ) + + application = tornado.web.Application( + handlers = url, + **settings + ) + +从内容中可以看出,这个文件完成了对网站系统的基本配置,建立网站的请求处理集合。 + +`from url import url`是将url.py中设定的目录引用过来。 + +setting引用了一个字典对象,里面约定了模板和静态文件的路径,即声明已经建立的文件夹"templates"和"statics"分别为模板目录和静态文件目录。 + +接下来的application就是一个请求处理集合对象。请注意`tornado.web.Application()`的参数设置: + +>tornado.web.Application(handlers=None, default_host='', transforms=None, **settings) + +关于settings的设置,不仅仅是文件中的两个,还有其它,比如,如果填上`debug = True`就表示出于调试模式。调试模式的好处就在于有利于开发调试,但是,在正式部署的时候,最好不要用调试模式。其它更多的settings可以参看官方文档:[tornado.web-RequestHandler and Application classes](http://tornado.readthedocs.org/en/latest/web.html) + +**server.py**文件 + +这个文件的作用是将tornado服务器运行起来,并且囊括前面两个文件中的对象属性设置。 + + #!/usr/bin/env python + # coding=utf-8 + + import tornado.ioloop + import tornado.options + import tornado.httpserver + + from application import application + + from tornado.options import define, options + + define("port", default = 8000, help = "run on the given port", type = int) + + def main(): + tornado.options.parse_command_line() + http_server = tornado.httpserver.HTTPServer(application) + http_server.listen(options.port) + + print "Development server is running at http://127.0.0.1:%s" % options.port + print "Quit the server with Control-C" + + tornado.ioloop.IOLoop.instance().start() + + if __name__ == "__main__": + main() + +此文件中的内容,在[上节](./302.md)已经介绍,不再赘述。 + +如此这般,就完成了网站架势的搭建。 + +后面要做的是向里面添加内容。 + +------ + +[总目录](./index.md)   |   [上节:分析Hello](./302.md)   |   [下节:用tornado做网站(2)](./304.md) + +如果你认为有必要打赏我,请通过支付宝:**qiwsir@126.com**,不胜感激。 \ No newline at end of file diff --git a/3code/web/application.py b/3code/web/application.py new file mode 100644 index 0000000..55496ee --- /dev/null +++ b/3code/web/application.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# coding=utf-8 + +from url import url + +import tornado.web +import os + +setting = dict( + template_path = os.path.join(os.path.dirname(__file__), "templates"), + static_path = os.path.join(os.path.dirname(__file__), "statics") + ) + +application = tornado.web.Application( + handlers = url, + **setting + ) diff --git a/3code/web/application.pyc b/3code/web/application.pyc new file mode 100644 index 0000000000000000000000000000000000000000..835c044e2b56052eefff4b72438d7eef5f5f7775 GIT binary patch literal 493 zcmZWk%TB{E5FFd-JC({OAaTg4`~X7m0~~lBm)|sM+1#gIK`yTCw(ZSt)-#c5e!>*0IJn@Xn mI0e6Ay1qUWtozTn&H literal 0 HcmV?d00001 diff --git a/3code/web/server.py b/3code/web/server.py new file mode 100644 index 0000000..9b35bbc --- /dev/null +++ b/3code/web/server.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# coding=utf-8 + +import tornado.ioloop +import tornado.options +import tornado.httpserver + +from application import application + +from tornado.options import define, options + +define("port", default = 8000, help = "run on the given port", type = int) + +def main(): + tornado.options.parse_command_line() + http_server = tornado.httpserver.HTTPServer(application) + http_server.listen(options.port) + + print "Development server is running at http://127.0.0.1:%s" % options.port + print "Quit the server with Control-C" + + tornado.ioloop.IOLoop.instance().start() + +if __name__ == "__main__": + main() diff --git a/3code/web/url.py b/3code/web/url.py new file mode 100644 index 0000000..c0ec0c1 --- /dev/null +++ b/3code/web/url.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python +# coding=utf-8 +""" +the url structure of website +""" +import sys +reload(sys) +sys.setdefaultencoding("utf-8") + +from handler.index import IndexHandler + +url = [ + (r'/', IndexHandler), +] diff --git a/3code/web/url.pyc b/3code/web/url.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a41295d244c4e62a77ae474ab858a42ece41e46b GIT binary patch literal 340 zcmYLDO-sZ;3{Bc?m9ho#2S|^-*u8oX@u;94{5aT4sZF|DnQf($LHF!W_6KOP3I^sS z?Ni4*D8=UaiO*D*a$yMI`npJ~2 q->U$71HG*@@(=z{X|>Wu^|liu=i7;b;|sgfX9_7UF~dAMihlsInMO+h literal 0 HcmV?d00001 diff --git a/3images/30301.png b/3images/30301.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec59c406ddcb8b433801aee2a8d1cc62b45299c GIT binary patch literal 13011 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开发框架,python的常用web框架,tornado框架介绍和安装 2. [分析Hello](./302.md)==>发布tornado做的网站,并剖析基本结构 +3. [用tornado做网站(1)](./303.md)==>网站的基本结构,一个基于tornado框架的网站架子 ##第五部分:科学计算 From fbe8521dabd88015e6b45e485290b3c32d00832f Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 19 May 2015 16:48:19 +0800 Subject: [PATCH 061/417] add __init__.py --- 219.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/219.md b/219.md index 485f823..fd579fe 100644 --- a/219.md +++ b/219.md @@ -186,6 +186,10 @@ python不是一个封闭的体系,是一个开放系统。开放系统的最 如此,就完成了告知过程。 +##`__init__.py`方法 + +`__init__.py`是一个空文件,将它放在某个目录中,就可以将该目录中的其它.py文件作为模块被引用。这个具体应用参见[用tornado做网站(2)](./304.md) + ------ [总目录](./index.md)   |   [上节:错误和异常(3)](./218.md)   |   [下节:标准库(1)](./220.md) From 3064b03b1ffa92f9da437c88687356f2004d3f83 Mon Sep 17 00:00:00 2001 From: qiwsir Date: Tue, 19 May 2015 16:50:26 +0800 Subject: [PATCH 062/417] tornado 2 --- 304.md | 191 +++++++++++++++++++++++++++++ 3code/web/handlers/__init__.py | 0 3code/web/handlers/__init__.pyc | Bin 0 -> 162 bytes 3code/web/handlers/index.py | 8 ++ 3code/web/handlers/index.pyc | Bin 0 -> 669 bytes 3code/web/methods/db.py | 8 ++ 3code/web/statics/js/jquery.min.js | 5 + 3code/web/statics/js/script.js | 9 ++ 3code/web/templates/index.html | 16 +++ 3code/web/url.py | 2 +- 3images/30401.png | Bin 0 -> 8111 bytes 3images/30402.png | Bin 0 -> 7224 bytes 3images/30403.png | Bin 0 -> 114615 bytes 3images/30404.png | Bin 0 -> 40367 bytes 3images/30405.png | Bin 0 -> 114872 bytes index.md | 1 + 16 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 304.md create mode 100644 3code/web/handlers/__init__.py create mode 100644 3code/web/handlers/__init__.pyc create mode 100644 3code/web/handlers/index.py create mode 100644 3code/web/handlers/index.pyc create mode 100644 3code/web/methods/db.py create mode 100644 3code/web/statics/js/jquery.min.js create mode 100644 3code/web/statics/js/script.js create mode 100644 3code/web/templates/index.html create mode 100644 3images/30401.png create mode 100644 3images/30402.png create mode 100644 3images/30403.png create mode 100644 3images/30404.png create mode 100644 3images/30405.png diff --git a/304.md b/304.md new file mode 100644 index 0000000..b6ee9d2 --- /dev/null +++ b/304.md @@ -0,0 +1,191 @@ +>你们不要被那诸般怪异的教训勾引了去。因为人心靠恩得坚固才是好的,并不是靠饮食;那在饮食上专心的,从来没有得着益处。(HEBREWS 13:9) + +#用tornado做网站(2) + +既然摆好了一个网站的架势,下面就可以向里面填内容。 + +##连接数据库 + +要做的网站,有数据库支持,虽然这不是必须的,但是如果做一个功能强悍的网站,数据库就是必须的了。 + +接下来的网站,我暂且采用mysql数据库。 + +怎么连接mysql数据呢?其方法跟[《mysql数据库(1)](./230.md)中的方法完全一致。为了简单,我也不新建数据库了,就利用已经有的那个数据库。 + +在上一节中已经建立的文件夹methods中建立一个文件db.py,并且参考[《mysql数据库(1)](./230.md)和[《mysql数据库(2)](./231.md)的内容,分别建立起连接对象和游标对象。代码如下: + + #!/usr/bin/env python + # coding=utf-8 + + import MySQLdb + + conn = MySQLdb.connect(host="localhost", user="root", passwd="123123", db="qiwsirtest", port=3306, charset="utf8") #连接对象 + + cur = conn.cursor() #游标对象 + +##用户登录 + +###前端 + +很多网站上都看到用户登录功能,这里做一个简单的登录,其功能描述为: + +>当用户输入网址,呈现在眼前的是一个登录界面。在用户名和密码两个输入框中分别输入了正确的用户名和密码之后,点击确定按钮,登录网站,显示对该用户的欢迎信息。 + +用图示来说明,首先呈现下图: + +![](./3images/30401.md) + +用户点击“登录”按钮,经过验证是合法用户之后,就呈现这样的界面: + +![](./3images/30401.md) + +先用HTML写好第一个界面。进入到templates文件,建立名为index.html的文件: + + + + + + Learning Python + + +