天天看点

《Python Cookbook(第2版)中文版》——1.12 控制大小写

本节书摘来自异步社区《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字符串不适用。