本文均来自Python Cookbook,本博文励志将Cookbook中的string部位,文件,面向对象编程部分完成,本系列博文陆续还会介绍flask框架,每篇博文都以一个个小例子展示。
#-*- coding: utf-8 -*-''' reduce()函数有两个参数: 第一个参数:是一个函数,这个函数有两个参数 第二个参数:是一个列表 reduce()函数的过程是:调用函数并传入列表中的第一个数和第二个数, 并将结果和第三个参数再次传递给这个函数。依次类推。'''def Link(name1,name2): return name1+name2+"|"print reduce(Link,"zhang")#zh|a|n|g|''' 字符串列表的连接成一个大字符串的方法: 方法一: 遍历字符串列表,使用+=连接 方法二: reduce(operator.add,字符串列表) 方法三: "".join(字符串列表) 这三种方法中第三种方法最优 前两种都会产生中间结果,第三种不需要产生中间结果,速度更快,性能更好'''resultString="";name=['zhang','test','wang']#方法一for i in name: resultString+=iprint resultString#方法二import operatorprint reduce(operator.add,name)#方法三print "".join(name)#结果如下:#zhangtestwang#zhangtestwang#zhangtestwang''' 字符串反转'''#字符串反转teststring="zhang"revchars = teststring[::-1]print revchars#单词反转teststring="zhang wang loiu"revwords = teststring.split()revwords.reverse()revwords = ' '.join(revwords)print revwords''' 检查字符串中是否包含某字符集合中的字符 对于集合问题如果参数提供的是列表那么最好转换成集合来操做'''#方法一def containAny(seq,asets): for c in seq: if c in asets: return True else: return False# 方法二import itertoolsdef containAny2(seq,asets): for item in itertools.ifilter(asets.__contains__,seq): return True return Falseprint containAny2("zhang","www")print containAny("zhang","www")''' 字符串的translate和maketrans方法的使用 maketrans用于生成一个翻译表有两个参数: 第一个参数:一串字符 第二个参数:一串字符 maketrans将形成第一参数到第二个参数的一个映射 例如: maketrans("zhang","wangs") z-->w h-->a a-->n n-->g g-->s translate的用法: "string".translate(映射表,字符串) 首选从"string"中过滤掉第二个参数中的字符串,然后按照映射表进行映射'''#一个对maketrans和translate使用示列import stringmapstring = string.maketrans('abc','ABC')fin = "zhang".translate(mapstring,"zhng")print fin#结果是A''' 什么是闭包?'''#闭包的使用示列def bibao(onenum): num=20+onenum def count(twonum): return twonum+num return counttest = bibao(50)print test(20)#结果是:90''' 过滤字符串中不属于指定集合的字符'''import string#无需翻译映射表allchars = string.maketrans('','')def makefilter(keep): #获取要删除的字符,keep是要保留的字符,下面这段代码是取补集 delchars = allchars.translate(allchars,keep) def thefilter(s): return s.translate(allchars,delchars) return thefilterif __name__ == '__main__': test = makefilter('esf') print test('zhang yzhangi fei') #结果fe