在向大家详细介绍Python应用程序之前,首先让大家了解下什么是Python应用程序,然后全面介绍Python应用程序的种种特性,Python的Virtual Machine是一种更高级的Virtual Machine。
但是它不仅为开发者带来许多让人感兴趣的特性,同时在性能方面也有所改善。在上一篇中,我们为读者详细介绍了Python应用程序在核心语言方面的变化,而本文则将要为读者介绍新版本中标准程序库方面的变化。
主要的新增物是一个有序字典类,使其有了自己的PEP。当遍历一个排序后的字典的时候,您将得到一个键列表和一些值。并且其顺序正是其插入的顺序——这正是我们所希望的。 下面我们用一个实例来说明排序后的字典和常规字典之间的区别:
- import HTMLParser
- import urllib
- import sys
- #定义HTML解析器
- class parseLinks(HTMLParser.HTMLParser):
- def handle_starttag(self, tag, attrs):
- if tag == 'a':
- for name,value in attrs:
- if name == 'href':
- print value
- print self.get_starttag_text()
- #创建HTML解析器的实例
- lParser = parseLinks()
- #打开HTML文件
- lParser.feed(urllib.urlopen( \
- "http://www.python.org/index.html").read())
- lParser.close()
如您所见,有序字典维护有个元素的原始顺序,而标准字典则没有。不过有一点要注意,如果你使用命名参数而非键/值对来填充此字典的话。它就维护其顺序。 也许这是一个bug。
因为使用命名参数是一种初始化字典的理想方式,并且个元素有一个明确的从左到右的顺序。我们这里使用的元素与***个例子完全一样:这个类可以使用一组典型的字典方法即keys()、values()和items()来访问其内容;
不过,这个类的update()方法跟常规字典的update()方法有所不同。它可以接受序列或者值为整数的映射。如果使用的是序列。它会统计元素个数,并将其加到原先元素个数上。对于映射,它会统计该映射中的每个对象,并将结果加到原先的统计个数中。以下代码对上面的示例中已经初始化过的Counter类进行更新:
- import HTMLParser
- import urllib
- import sys
- #定义HTML解析器
- class parseLinks(HTMLParser.HTMLParser):
- def handle_starttag(self, tag, attrs):
- if tag == 'a':
- for name,value in attrs:
- if name == 'href':
- print value
- print self.get_starttag_text()
- #创建HTML解析器的实例
- lParser = parseLinks()
- #打开HTML文件
- lParser.feed(urllib.urlopen( \
- "http://www.python.org/index.html").read())
- lParser.close()
Itertools模块不仅可以处理无穷序列,而且还可以处理有限序列。在Python应用程序中,它引入了两个新的函数:combinations_with_replacement()函数和compress()函数。
【编辑推荐】