字符串——类型特有的方法

未匹配的标注

到目前为止,已经研究过的每个字符串操作其实都是序列操作——也就是说,这些操作都将适用于Python中的其他序列,包括列表和元组。然而,除了通用的序列操作外,字符串也还有它们独有的操作,作为方法(依附和作用于特定对象的函数,它们被表达式调用触发)可用。

比如,字符串的find方法是基本的子字符串搜索操作(它返回传入子字符串的偏移量,如果没有找到就返回-1),字符串的replace方法执行全局搜索和替换;这两个方法都作用于它们依附和调用的主体对象:

>>> S = 'Spam'
>>> S.find('pa') # 在S中找出子字符串的偏移量
1
>>> S
'Spam'
>>> S.replace('pa', 'XYZ') # 在S中用一个字符串替换另一个
'SXYZm'
>>> S
'Spam

同样,尽管这些字符串方法的名字(看上去是改变了字符串),但在这里并没有改变原始字符串,而是创建了新字符串作为结果——因为字符串是不可变的,这是字符串方法可以工作的唯一方式。字符串方法是Python中文本处理工具的基础。其他方法根据分割符将字符串分割为子字符串(作为一种简单的解析形式很方便),执行大小写转换,测试字符串内容(数字,字母等等),去掉字符串结尾的空白字符:

>>> line = 'aaa,bbb,ccccc,dd'
>>> line.split(',') # 基于分割符分割为一个子字符串列表
['aaa', 'bbb', 'ccccc', 'dd']
>>> S = 'spam'
>>> S.upper() # 大小写转换
'SPAM'
>>> S.isalpha() # 内容测试:isalpha, isdigit 等等。
True
>>> line = 'aaa,bbb,ccccc,dd\n'
>>> line.rstrip() # 移除右边的空格
'aaa,bbb,ccccc,dd'
>>> line.rstrip().split(',') # 链接两个操作
['aaa', 'bbb', 'ccccc', 'dd']

注意这里的最后一个命令——它在分割前先移除,因为Python从左往右运行,在这个过程中产生了一个临时结果。字符串还支持被称为格式化的高级替换操作,有表达式(原来的)和字符串方法调用(从2.6和3.0开始)两种方法可用;第二个方法从2.7和3.1版本开始允许忽略相对参数值数字:

>>> '%s, eggs, and %s' % ('spam', 'SPAM!') # 格式化表达式 (所有版本可用)
'spam, eggs, and SPAM!'
>>> '{0}, eggs, and {1}'.format('spam', 'SPAM!') # 格式化方法 (2.6+, 3.0+ 可用)
'spam, eggs, and SPAM!'
>>> '{}, eggs, and {}'.format('spam', 'SPAM!') # 可选数字 (2.7+, 3.1+ 可用)
'spam, eggs, and SPAM!'

格式化的功能很丰富,将推迟到本书后面来讨论,当必须产生数字化报告时,这些功能往往是很重要的:

>>> '{:,.2f}'.format(296999.2567) # 分隔符,小数位数
'296,999.26'
>>> '%.2f | %+05d' % (3.14159, -42) # 位数,填充位,符号
'3.14 | −0042'

这里注意一点:虽然序列操作是通用的,但方法不是——虽然一些类型共享了一些方法名,但字符串方法操作通常只适用于字符串,并不适用于其他。作为一个经验法则,Python的工具集是层叠的:贯通多个类型的通用操作作为内置函数或表达式出现(比如,len(X),X[0]),但特定类型的操作是方法调用(比如,aString.upper())。随着更多地使用Python,在这些类别中找到所需工具将会变得更加自然,但下一部分给出了可以马上使用的几个提示。

Refer:

Python String format() Method

% (String Formatting Operator) — Python Reference (The Right Way) 0.1 documentation

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~