`
friendsys
  • 浏览: 338822 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Python Totorial入门指南 笔记 [9:]

阅读更多
实现自定义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)

























































分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics