在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, right http 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)詳解
#3. MySQL之-資料表分區技術PARTITION的程式碼範例淺析
以上是Python中partition字串函數實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!