本文均来自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+=i print resultString #方法二 import operator print 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 itertools def containAny2(seq,asets): for item in itertools.ifilter(asets.__contains__,seq): return True return False print 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 string mapstring = 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 count test = 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 thefilter if __name__ == '__main__': test = makefilter('esf') print test('zhang yzhangi fei') #结果fe