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

    xiaoxiao2024-03-11  127

    本节书摘来自异步社区《Python Cookbook(第2版)中文版》一书中的第1章,第1.12节,作者[美]Alex Martelli , Anna Martelli Ravenscrof , David Ascher ,高铁军 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    1.12 控制大小写

    任务

    将一个字符串由大写转成小写,或者反其道而行之。

    解决方案

    这正是字符串对象提供upper和lower方法的原因。每个方法都不需要参数,直接返回一个字符串的拷贝,其中的每个字母都被改变成大写形式—或小写形式:

    big = little.upper( ) little = big.lower( )

    非字母的字符按照原样被复制。

    s.capitalize和s[:1].upper()+s[1:].lower()相似:第一个字符被改成大写,其余字符被转成小写。s.title也很相似,不过它将每个单词的第一个字母大写(这里的单词可以是字母的序列),其余部分则转成小写:

    >>> print 'one tWo thrEe'.capitalize( ) One two three >>> print 'one tWo thrEe'.title( ) One Two Three

    讨论

    操作字符串大小写是很常见的需求,有很多方法可以让你创建需要的字符串。另外,还可以检查一个字符串是否已经是满足需求的形式,比如isupper、islower和istitle方法,如果给定的字符串不是空的,至少含有一个字母,而且分别满足全部大写、全部小写、每个单词开头大写的条件,这三种方法都会返回一个True,但是却没有类似的iscapitalized方法。不过如果我们需要一个行为方式类似于“is…”的方法,自己编写代码也很简单。如果给定的字符串是空的,那些方法都会返回False。如果给定的字符串非空,但是却不包含任何字母字符,也将全部返回False。

    最清楚简单的iscapitalized,仅需简洁的一行:

    def iscapitalized(s): return s == s.capitalize( )

    不过,这偏离了“is…”方法们的行为模式,对于空字符串和不含字母的字符串,它也返回True。我们再给出一个严格点的版本:

    import string notrans = string.maketrans('', '') #identity''translation'' def containsAny(str, strset): return len(strset) != len(strset.translate(notrans, str)) def iscapitalized(s): return s == s.capitalize( ) and containsAny(s, string.letters)

    这里,我们用了第1.8节中的函数来确保,当遇到了空字符串或不含字母的字符串,返回值是False。不过也正如第1.8节的提示一样,那意味着这个特别的iscapitalized只适用于普通字符串,对Unicode字符串不适用。

    相关资源:《Python Cookbook》第三版中文v3.0.0.pdf 熊熊
    最新回复(0)