本文均来自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
转载于:https://blog.51cto.com/forlinux/1404744