python学习笔记——字符串
类方法string.upper(str)需要引入string模块,实例方法str.upper()不需要引入string模块
无与伦比的列表解析功能
# coding=utf-8 # 列表解析 print [i * 2 for i in [8, -2, 5]] print [i for i in range(8) if i % 2 == 0]在FF的javascript1.7就实现了相同的语法( Array Comprehension)
var evens = [i for (i in range(0, 21)) if (i % 2 == 0)];
字符串模板
# coding=utf-8 # 字符串模板 from string import Template s = Template('There are ${howmany} ${lang} Quotation Symbols') print s.substitute(lang='python',howmany=3)
这东西,javascrit也有,如著名的Prototype就有这个Template类,不同的是它的替换函籽叫做evaluate,而不是substitute,mootools有这个同名方法,但却是直接内置到String原生对象上,kissy框架则是这样用KISSY.substitute(str, o),qwrap框架经过retouch后,可以这样用'{0} love {1}'.format('I','You'),而我的框架dom.format则支持两个传参方式:
//http://www.cnblogs.com/rubylouvre/archive/2011/03/06/1972176.html var a = dom.format("Result is #{0},#{1}", 22,33); alert(a);//"Result is 22,33" var b = dom.format("#{name} is a #{sex}",{name:"Jhon",sex:"man"}); alert(b);//"Jhon is a man"
原始字符串操作符(r/R),能方便处理反斜杠:
f = open(r'C:\Program Files\Adobe\Reader 9.0\Setup Files\{AC76BA86-7AD7-2052-7B44-A94000000001}\setup.ini','r') for i in f: print i f.close()
同时遍历索引与值,以前我们使用for是这样实现的:
for i in range (0,len(list)): print i ,list[i]
现在我们可以使用enumerate方法,更简洁:
for index,text in enumerate(list)): print index ,text
对于javascript,想同时处理值与索引,我们可以使用javascript1.7的forEach迭代器,它直接在回调函数传入元素与索引与数组本身.
我想其内部的实现大概也是如此
def enumerate(collection): 'Generates an indexed series: (0,coll[0]), (1,coll[1]) ...' i = 0 it = iter(collection) while 1: yield (i, it.next()) i += 1
类型 | 方法 | 注解 |
---|---|---|
填充 |
center(width[, fillchar]), ljust(width[, fillchar]), rjust(width[, fillchar]), zfill(width), expandtabs([tabsize]) |
|
删减 |
strip([chars]), lstrip([chars]), rstrip([chars]) |
chars为指定要去掉的字符,默认为空白字符,它由string.whitespace常量定义 |
变形 |
lower(),#全部小写 upper(),#全部小写 capitalize(),#首字母大写 swapcase(),#大小写交换 title()#每个单词第一个大写,其他小写 |
因为title() 函数并不去除字符串两端的空白符也不会把连续的空白符替换为一个空格, 所以建议使用string 模块中的capwords(s)函数,它能够去除两端的空白符,再将连续的空白符用一个空格代替。 >>> ' hello world!'.title() ' Hello World!' >>> string.capwords(' hello world!') 'Hello World!' |
切割 |
partition(sep), rpartition(sep), splitlines([keepends]), split([sep [,maxsplit]]), rsplit([sep[,maxsplit]]) |
|
连接 | join(seq) |
join() 函数的高效率(相对于循环相加而言),使它成为最值得关注的字符串方法之一。 它的功用是将可迭代的字符串序列连接成一条长字符串,如: >>> conf = {'host':'127.0.0.1', ... 'db':'spam', ... 'user':'sa', ... 'passwd':'eggs'} >>> ';'.join("%s=%s"%(k, v) for k, v in conf.iteritems()) 'passswd=eggs;db=spam;user=sa;host=127.0.0.1' |
判定 |
isalnum(), isalpha(), isdigit(), islower(), isupper(), isspace(), istitle(), startswith(prefix[, start[, end]]), endswith(suffix[,start[, end]]) |
这些函数都比较简单,顾名知义。需要注意的是*with()函数族可以接受可选的 start, end 参数,善加利用,可以优化性能。 另,自 Py2.5 版本起,*with() 函数族的 prefix 参数可以接受 tuple 类型的实参,当实参中的某人元素能够匹配,即返回 True。 |
查找 |
count( sub[, start[, end]]), find( sub[, start[, end]]), index( sub[, start[, end]]), rfind( sub[, start[,end]]), rindex( sub[, start[, end]]) |
find()函数族找不到时返回-1,index()函数族则抛出ValueError异常。 另,也可以用 in 和 not in 操作符来判断字符串中是否存在某个模板。 |
替换 |
replace(old, new[,count]), translate(table[,deletechars]) |
replace()函数的 count 参数用以指定最大替换次数 translate() 的参数 table 可以由 string.maketrans(frm, to) 生成 translate() 对 unicode 对象的支持并不完备,建议不要使用。 |
编码 |
encode([encoding[,errors]]), decode([encoding[,errors]]) |
这是一对互逆操作的方法,用以编码和解码字符串。因为str是平台相关的,它使用的内码依赖于操作系统环境, 而unicode是平台无关的,是Python内部的字符串存储方式。 unicode可以通过编码(encode)成为特定编码的str,而str也可以通过解码(decode)成为unicode。 |
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年