Python 序列: 字符串
Python 中的字符串是单引号(’ ’)、双引号(" “)、三引号(’’’ ’’’ 或者”"" """)包裹的内容。字符串是不可变类型。就是说改变一个字符串的元素需要新建一个新的字符串。字符串是由独立的字符组成的,并且这些字符可以通过切片操作顺序地访问。由于字符串属于序列类型,所以适用于序列的操作符和内建函数页同样使用于字符串,这里不再单独讲述,而只是列举一些字符串特有的操作符,方法和特性。str 和 repr
函数 str(),repr()运算在特性和功能方面都非常相似,但 repr() 主要返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求值运算(使用内建函数eval())重新得到该对象,并不是所有repr()返回的字符串都能够用 eval()内建函数得到原来的对象。而 str() 致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值,但很适合用于print语句输出。repr() 可以用用 **`**(倒引号) 代替,但在 Python3.0 之后已不在支持,所以建议用 repr() 函数。print` 语句会自动为每个对象调用 str() 函数。
简而言之,str、repr 和倒引号是 Python 值转化为字符串的 3 种方式。函数 str 让字符串更易于阅读,而 repr(和倒引号)则把结果字符串转化为合法的 Python 表达式。
在类定义中(class),可以重构 _str_ 和 _repr_ 方法,已自定义 str 和 repr 函数返回的结果。
原始字符串
原始字符串是保持字符串按原样输出的一类字符串,即字符串中的特殊字符不会被转义。原始字符串以 r 开头,如下若是
不能在原始字符串结尾输入反斜线,也就是说原始字符串的最后一个字符不能为反斜线。因为当最后一个字符是反斜线时,Python 不知道是否该结束字符串。如果结尾需要有反斜线,则需要用反斜线转义。
格式化操作符
% 是 Python 风格的字符串格式化操作符。只适用于字符串类型,非常类似于 C 语言里面的 printf() 函数的字符串格式化,甚至所用的符号都一样,都用百分号(%),并且支持所有 printf()式的格式化操作。语法如下:
format_string % arguments_to_convert
Python 支持两种格式的输入参数。第一种是元组,这基本上是一种的 C printf() 风格的转换参数集;另一种是字典形式,这种形式里面,key 是作为格式字符串出现,相对应的 value 值作为参数在进行转化时提供给格式字符串。
字符串模板
字符串格式化操作符是 Python 里面处理这类问题的主要手段,而且以后也是如此。然而它也不是完美的,其中的一个缺点是它不是那么直观,尤其对刚从 C/C++转过来的 Python 新手来说更是如此,即使是现在使用字典形式转换的程序员也会偶尔出现遗漏转换类型符号的错误,比如说,用了%(lang)而不是正确的%(lang)s.为了保证字符串被正确的转换,程序员必须明确的记住转换类型参数,比如到底是要转成字符串,整数还是其他什么类型。
新式的字符串模板的优势是不用去记住所有的相关细节的,而是像现在 shell 风格的脚本语言里面那样使用美元符号($)。
由于新式的字符串 Template 对象的引进使得 string 模块又重新活了过来,Template 对象有两个方法,substitute()和 safe_substitute()。前者更为严谨,在 key 缺少的情况下它会报一个 KeyError 的异常出来,而后者在缺少 key 时,直接原封不动的把字符串显示出来。如下所示:
字符串方法
字符串常用方法总结
字符串常用方法
字符串不变性
字符串是一种不可变数据类型,就是说它的值是不能被改变或修改的。这就意味着如果你想修改一个字符串,或者截取一个子串,或者在字符串的末尾连接另一个字符串等等,你必须新建一个字符串。
在 Python 中,左值必须是一个完整的对象,比如说一个字符串对象,不能是字符串的一部分。