'on'
>>> word[42:] ''
Python字符串不可以被更改 — 它们是 不可变 的。因此,赋值给字符串索引的位置会导致错误:
>>> word[0] = 'J' ...
TypeError: 'str' object does not support item assignment >>> word[2:] = 'py' ...
TypeError: 'str' object does not support item assignment 如果你需要一个不同的字符串,你应该创建一个新的: >>> 'J' + word[1:] 'Jython'
>>> word[:2] + 'py' 'Pypy'
内置函数 len() 返回字符串长度:
>>> s = 'supercalifragilisticexpialidocious' >>> len(s) 34 See also
Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange
字符串和下节描述的Unicode字符串是 序列类型 的例子,它们支持这种类型共同的操作。
String Methods
字符串和Unicode字符串都支持大量的方法用于基本的转换和查找。
String Formatting
这里描述了使用 str.format() 进行字符串格式化的信息。
String Formatting Operations
这里描述了旧式的字符串格式化操作,它们在字符串和Unicode字符串是 % 操作符的左操作数时调用。
3.1.3. 关于 Unicode
从 Python2.0 起,程序员们有了一个新的用来存储文本数据的类型:Unicode 对象。它可以用于存储和维护 Unicode 数据 (参见 http://www.unicode.org/),并且与现有的字符串对象有良好的集成,必要时提供自动转换。
Unicode 的先进之处在于为每一种现代或古代使用的文字系统中出现的每一个字符都提供了统一的序列号。之前,文字系统中的字符只能有 256 种可能的顺序。通过代码页分界映射。文本绑定到映射文字系统的代码页。这在软件国际化的时候尤其麻烦(通常写作 i18n —— 'i' + 18 个字符 + 'n')。Unicode 解决了为所有的文字系统设置一个独立代码页的难题。
在 Python 中创建 Unicode 字符串和创建普通的字符串一样简单: >>> u'Hello World !' u'Hello World !'
引号前的 'u' 表示这会创建一个 Unicode 字符串。如果想要在字符串中包含特殊字符,可以使用 Python 的 Unicode-Escape。请看下面的例子: >>> u'Hello\ World !' u'Hello World !'
转码序列 \ 表示在指定位置插入编码为 0x0020 的 Unicode 字符(空格)。
其他字符就像 Unicode 编码一样被直接解释为对应的编码值。如果你有在许多西方国家使用的标准 Latin-1 编码的字符串,你会发现编码小于 256 的 Unicode 字符和在 Latin-1 编码中的一样。
特别的,和普通字符串一样,Unicode 字符串也有原始模式。可以在引号前加 ―ur‖,Python 会采用 Raw-Unicode-Escape 编码(译者:原始 Unicode 转义)。如果有前缀为 ?u‘ 的数值,它也只会显示为 uXXXX: >>> ur'Hello\ World !' u'Hello World !'
>>> ur'Hello\\\ World !' u'Hello\\\\\\\ World !'
如果你需要大量输入反斜杠,原始模式非常有用,这在正则表达式中几乎是必须的。
作为这些编码标准的一部分,Python 提供了基于已知编码来创建 Unicode 字符串的整套方法。
内置函数 unicode() 可以使用所有注册的 Unicode 编码(COders 和
DECoders)。众所周知,Latin-1 ,ASCII ,UTF-8 和 UTF-16 之类的编码可以互相转换(译者:Latin-1 表示一个很小的拉丁语言符号集,与 ASCII 基本一致,其实不能用来表示庞大的东方语言字符集)。后两个是变长编码,将每一个 Unicode 字符存储为一到多个字节。通常默认编码为 ASCII,此编码接受 0 到 127 这个范围的编码,否则报错。将一个 Unicode 字符串打印或写入到文件中,或者使用 str() 转换时,转换操作以此为默认编码: >>> u\ u'abc'
>>> str(u\) 'abc'
>>> u\盲枚眉\ u'\\xe4\\xf6\\xfc' >>> str(u\盲枚眉\)
Traceback (most recent call last): File \, line 1, in ? UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
为了将一个 Unicode 字符串转换为一个使用特定编码的 8 位字符串,Unicode 对象提供一个 encode() 方法,它接受编码名作为参数。编码名应该小写。: >>> u\盲枚眉\.encode('utf-8') '\\xc3\\xa4\\xc3\\xb6\\xc3\\xbc'
如果有一个其它编码的数据,希望可以从中生成一个 Unicode 字符串,你可以使用 unicode 函数,它接受编码名作为第二参数:
>>> unicode('\\xc3\\xa4\\xc3\\xb6\\xc3\\xbc', 'utf-8') u'\\xe4\\xf6\\xfc'
3.1.4. 列表
Python 有几个 复合 数据类型,用于表示其它的值。最通用的是 list (列表) ,它可以写作中括号之间的一列逗号分隔的值。列表的元素不必是同一类型:
>>> squares = [1, 4, 9, 16, 25] >>> squares
[1, 4, 9, 16, 25]
>>> a = ['spam', 'eggs', 100, 1234] >>> a
['spam', 'eggs', 100, 1234] 就像字符串一样,列表可以被索引和切片:
>>> squares[0] # indexing returns the item 1
>>> squares[-1] 25
>>> squares[-3:] # slicing returns a new list [9, 16, 25]
所有的切片操作都会返回一个包含请求的元素的新列表。这意味着下面的切片操作返回列表一个新的(浅)拷贝副本: >>> squares[:] [1, 4, 9, 16, 25] 列表也支持连接这样的操作:
>>> squares + [36, 49, 64, 81, 100] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 不像 不可变的 字符串,列表允许修改元素:
>>> cubes = [1, 8, 27, 65, 125] # something's wrong here >>> 4 ** 3 # the cube of 4 is 64, not 65! 64
>>> cubes[3] = 64 # replace the wrong value >>> cubes
[1, 8, 27, 64, 125]
你还可以使用 append() 方法(后面我们会看到更多关于列表的方法的内容)在列表的末尾添加新的元素:
>>> cubes.append(216) # add the cube of 6 >>> cubes.append(7 ** 3) # and the cube of 7 >>> cubes
[1, 8, 27, 64, 125, 216, 343]
也可以对切片赋值,此操作可以改变列表的尺寸,或清空它: >>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g'] >>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E'] >>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g'] >>> # now remove them >>> letters[2:5] = [] >>> letters
['a', 'b', 'f', 'g']
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = [] >>> letters []
内置函数 len() 同样适用于列表: >>> a = ['a', 'b', 'c', 'd'] >>> len(a) 4
允许嵌套列表(创建一个包含其它列表的列表),例如: >>> a = ['a', 'b', 'c'] >>> n = [1, 2, 3] >>> x = [a, n] >>> x
[['a', 'b', 'c'], [1, 2, 3]] >>> x[0]
['a', 'b', 'c'] >>> x[0][1] 'b'
3.2. 编程的第一步
当然,我们可以使用 Python 完成比二加二更复杂的任务。例如,我们可以写一个生成 菲波那契 子序列的程序,如下所示:
>>> # Fibonacci series:
... # the sum of two elements defines the next ... a, b = 0, 1 >>> while b < 10: ... print b
... a, b = b, a+b