本節書摘來自異步社群《python cookbook(第2版)中文版》一書中的第1章,第1.12節,作者[美]alex martelli , anna martelli ravenscrof , david ascher ,高鐵軍 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
任務
将一個字元串由大寫轉成小寫,或者反其道而行之。
解決方案
這正是字元串對象提供upper和lower方法的原因。每個方法都不需要參數,直接傳回一個字元串的拷貝,其中的每個字母都被改變成大寫形式—或小寫形式:
非字母的字元按照原樣被複制。
s.capitalize和s[:1].upper()+s[1:].lower()相似:第一個字元被改成大寫,其餘字元被轉成小寫。s.title也很相似,不過它将每個單詞的第一個字母大寫(這裡的單詞可以是字母的序列),其餘部分則轉成小寫:
讨論
操作字元串大小寫是很常見的需求,有很多方法可以讓你建立需要的字元串。另外,還可以檢查一個字元串是否已經是滿足需求的形式,比如isupper、islower和istitle方法,如果給定的字元串不是空的,至少含有一個字母,而且分别滿足全部大寫、全部小寫、每個單詞開頭大寫的條件,這三種方法都會傳回一個true,但是卻沒有類似的iscapitalized方法。不過如果我們需要一個行為方式類似于“is…”的方法,自己編寫代碼也很簡單。如果給定的字元串是空的,那些方法都會傳回false。如果給定的字元串非空,但是卻不包含任何字母字元,也将全部傳回false。
最清楚簡單的iscapitalized,僅需簡潔的一行:
不過,這偏離了“is…”方法們的行為模式,對于空字元串和不含字母的字元串,它也傳回true。我們再給出一個嚴格點的版本:
這裡,我們用了第1.8節中的函數來確定,當遇到了空字元串或不含字母的字元串,傳回值是false。不過也正如第1.8節的提示一樣,那意味着這個特别的iscapitalized隻适用于普通字元串,對unicode字元串不适用。