類方法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 Templates = 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 if.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]) |
- fillchar 參數指定了用以填充的字元,預設為空白格
- zfill的z為zero的縮寫,顧名思義,是以字元0進行填充,用於數值輸出
- expandtabs()的tabsize 參數預設為8。它的功能是把字串中的定位字元(tab)轉換為適當數量的空格。
|
刪減 |
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]]) |
- partition()函數族是2.5版本新增的方法。它接受一個字串參數,並返回一個3個元素的 tuple 對象。
如果sep沒出現在母串中,傳回值是 (sep, ‘’, ‘’); 否則,傳回值的第一個元素是 sep 左端的部分,第二個元素是 sep 自身,第三個元素是 sep 右端的部分。
- 參數 maxsplit 是分切的次數,即最大的分切次數,所以傳回值最多有 maxsplit+1 個元素。
- s.split() 和 s.split(‘ ‘)的傳回值不盡相同
>>> ' hello world!'.split() ['hello', 'world!'] >>> ' hello world!'.split(' ') ['', '', 'hello', '', '', 'world!'] 產生差異的原因在於當忽略 sep 參數或sep參數為 None 時與明確給 sep 賦予字串值時 split() 採用兩種不同的演算法。 對於前者,split() 先去除字串兩端的空白符,然後以任意長度的空白符串作為界定符分切字串 即連續的空白符串被當作單一的空白符看待; 對於後者則認為兩個連續的 sep 之間存在一個Null 字元串。因此對於Null 字元串(或空白符串),它們的傳回值也是不同的: >>> ''.split() [] >>> ''.split(' ') ['']
|
串連 |
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。 |