实现自定义class的迭代器,只需实现__iter__ 与next() 方法,其中iter方法只需返回自身
class iterDemo():
def __init__(self,name):
self.name=name
self.index=len(name)
def __iter__(self):
return self
def next(self):
if self.index==0:
raise StopIteration
self.index = self.index-1
return self.name[self.index]
for char in iterDemo('spanorz'):
print char
生成器,用于创建迭代器的简单和强大的工具
使用yield返回字符串,但是继续循环
def reve(data):
for index in range(len(data),-1,-1):
yield index
for char in reve("123456789"):
print char
生成器将会自动创建__iter__()与next()方法
生成器表达式
使用一些内置的函数来进行..如set max dict sum zip等方法,配合链表的使用
标准库介绍
操作系统接口 Operating System Interface
需要import os模块
导入时需要注意,不要使用from os import *, 放置os.open覆盖原来的open内置函数
在使用这些模块时,使用dir和help内置函数,可以提供非常有用的帮助
针对日常的文件和目录管理任务,shutil提供了易于使用的高级接口
如: 复制文件 copyfile.. 和移动文件 move..
glob模块提供了从指定目录,搜索指定通配符的文件列表(扩展名)
注意在读取中文文件名时,需要使用gbk进行decode
sys.stderr.write(".....") 用于输出错误信息
脚本的中止使用sys.exit();
字符串正则匹配 re模块,需要import
常用的方法有findall,与sub
如果只需要简单的功能,应该首先考虑字符串方法,简单而且易于阅读和调试
数学运算..math 模块,提供对底层C函数库的访问
随机数..random模块 提供了常用的方法如
choice,random(),sample,randrange等方法
互联网访问模块,有几个模块组成,最常用的包括
urllib2--从urls接受数据
smtplib--发送电子邮件模块
同样可以使用decode进行解码
如
import urllib2
for line in urllib2.urlopen("http://www.baidu.com"):
print line.decode("gbk")
日期和时间 Dates and Times, datetime模块
now = date.today() //也包括了对时间的格式化处理
如:
from datetime import date
date_1=date(2008,7,16);
date2=date.today()-date_1
print date2
格式化操作 --使用date_1.strftime()方法
print date_1.strftime("%Y年-%m月-%d日") //注意大小写
数据压缩 Data Compression
使用zlib,gzip,bz2,zipfile,tarfile等模块
常用方法..zlib.compress()压缩, decompress()解压缩,crc32获取crc码
如:
c="ah dahdj al djla jdl aj douq ej"
print len(c)
t=zlib.compress(c);
print len(t)
print zlib.crc32(c)
不过不知道为什么,压缩后的反而比较长
性能度量,timeit模块,主要为Timer类, 还有profile和pstats模块提供了针对更大代码块的时间度量工具
质量控制 Quality Control---主要为代码测试
doctest模块--通过勺内程序内嵌的文档字符串执行测试
测试的方法如下
import doctest
def aver(value):
"""
>>> aver(30) //注意aver()前必须加入>>> 注意空格,用于模拟方法执行
330
"""
return value
doctest.testmod(); //可以在这里之前加上 print,用于正确情况下也有输出
注意测试的注释,需要都放置在对应的方法体内,否则有可能出错,可以使用>>> 对一个方法进行多次测试
unittest模块,不像doctest模块那么容易使用,不过可以放置在一个独立的文件中提供更全面的测试集
xmlrpclib 和SimpleXmlRPCServer模块提供了对远程过程的调用--类似WebService
email包是一个邮件消息管理库,同时实现了构建和解析负责消息结构,如:互联网编码和头协议的工具集
xml.dom与xml.sax包提供了对xml的解析,提供了对xml信息交换格式的支持
国际化有gettext,locale和codecs包支持
标准库概览2
该部分的更高级的模块,很少出现在小脚本中
格式化输出 Output Formatting
repr,用于输出解释器所使用的格式
pprint --pretty printer 美化打印,使得数据结构显示的更清晰,与链表的等关联比较密切
如:
import pprint
t=[12313,324,344,556]
pprint.pprint(t,width=5)
textwrap模块,格式化文本字段以适合设定的屏幕宽度
如
print textwrap.fill(str(dir(textwrap)), 30)
locale库,提供不同国家的数据格式,进行格式化字符串输出
Templating模板
使用方式:
from string import Template //注意导入的方式
t=Template('${name} is a $thing')
print t.substitute(name='dog',thing='animal')
在建立模板时候,使用$xx作为占位符,填充时候使用key=value的形式进行赋值,{}不是必须的,适应$$创建一个
单独的$号
如果出现key缺少值的情况下,substitute方法会抛出KeyError异常,使用safe-substitute会更安全一些,缺少
的占位符会被保留输出
可以通过继承Template类,通过设置delimiter类,如:
class bsT(Template):
delimiter='&'
t=bsT('&{name} is a &thing')
print t.substitute(name='dog',thing='animal')
模板可以广泛的应用在XML,报表和HTML中
使用二进制记录层
struct模块提供pack()和unpack()函数用于变长二进制记录格式...暂不研究
多线程 Multi-threading 使用threading模块
可以通过继承 threading.Thread类实现,与Java类似,需要实现run方法,还可以使用Queue对象调度线程之间的
请求
日志系统 Logging模块
最简单的用户就是记录信息并发送到一个文件或者sys.stderr,记录的级别和Java类
似,debug,info,warning,error,critical等
默认信息是发送到标准错误流之中
弱引用 Weakref模块
用于跟踪对象,在对象被回收后,将会在弱引用表上删除,并触发回调
注册的方式:
d=weakref.WeakValueDictionary();
d['primary'] = a //其中a为需要监听的对象,primary为指向的key
链表工具 Lists Tool
array模块提供了类似链表的array()对象,它仅仅是存储数组,更为紧凑
clloections模块提供了类似链表的deque()对象,从左边添加append和pop弹出更快,当时内部查询更慢,
这些对象更是用于对象实现和广度优先的树搜索
该库还提供了bisect 这样的模块以操作存储链表
heapq提供了基于正规链表的堆的实现,最小值总是保持在0点
十进制浮点算法
使用decimal模块,提供高精度的运算
from decimal import *
print Decimal(1)/Decimal(7)