python學習筆記——字串

來源:互聯網
上載者:User

類方法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。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.