在2.5版中
新增
加了一個叫partition的
函數
,它可以做什麼呢?舉一個小例子:
>>> ‘http://www.donews.net/limodou’.partition(‘://’)
(‘http’, ‘://’, ‘www.donews.net/limodou’)
>>> ‘file:/a.html’.partition(‘://’)
(‘file:/a.html’, ”, ”)
從第一個例子可以看出,它用來根據指定的分隔字元將字串進行分割,如果字串包含指定的分隔字元,則返回一個3元的tuple,第一個為分隔字元左邊的子串,第二個為分隔字元本身,第三個為分隔字元右邊的子串。第二個例子說明,如果找不到指定的分隔字元,則返回仍然是一個3元的tuple,第一個為整個字串,第二和第三個為空白串。
那麼有人要問,它與split(sep, 1)有什麼區別呢?首先split返回的可能不是固定長度的傳回值,它返回的是一個list,如果找到,則返回一個2元list,如果沒找到,則返回一個1元的list,如:
>>> ‘a.b.c’.split(‘,’, 1)['a.b.c']>>> ‘a.b.c’.split(‘.’, 1)['a', 'b.c']
同時在找到的情況下,它並不返回分隔字元。
在某些情況下partition(sep)和rpartition(sep)(從右向左匹配)與split(sep, 1)和rsplit(sep, 1)的功能是類似的。不過partition其實是為了替換find,index而產生的,並不是為了替換split而產生的。在許多情況下,我們需要先通過find來找到一個位置,再進行分割。而使用partition就方便得多。如:
>>> a = ‘http://www.donews.net’>>> pos = a.find(‘://’)>>> if pos > -1:… print a[:pos], a[pos+1:]http www.donews.net
而使用partition:
>>> a = ‘http://www.donews.net’>>> left, sep, right = a.partition(‘://’)>>> print left, righthttp www.donews.net
是不是簡單一些呢。
同時在2.5版中,startswith和endswith有變化,它的第一個參數可以是一個tuple了。這樣用在判斷幾種情況的時候非常方便。比如要判斷檔案名稱尾碼,原來只支援一個值時,可能要先拆分,再判斷,用不上endswith,如:
>>> a = ‘a.gif’>>> import os.path>>> ext = os.path.splitext(a)[1]>>> if ext in ['.gif', '.png', '.bmp']:… print ‘found’…found
而現在可以:
>>> a = ‘a.gif’>>> if a.endswith((‘.gif’, ‘png’, ‘.bmp’)):… print ‘found’…found
是不是簡單多了。注意,上面的tuple我換成list就是不行,看來是強制的。
許多有趣的東西等著你我來發現。
【相關推薦】
1. 分享一篇Python中字串函數 (partition)詳解
2. 分享一個字串函數(partition)的執行個體代碼
3. MySQL之-資料表分區技術PARTITION的程式碼範例淺析