
2.3 简单数据类型
本节介绍包括数值、字符串和数组在内的简单数据类型。
2.3.1 数值
Python中有三种不同的数值类型:int(整数)、float(浮点数)和complex(复数)。
和Java或者C语言中的int类型不同。Python中的int类型是无限精度的。例如:

Python依据IEEE 754标准使用二进制表示float(浮点数),所以存在表示精度的问题。例如:

可以使用decimal模块使用十进制表示完整的小数。例如:

在傅里叶变换中会用到复数。复数在Python中是一个基本数据类型(complex)。例如:

一个复数有一些内置的访问器:

几个内置函数支持复数:

标准模块cmath具有处理复数的更多功能:

用于数值运算的算术运算符说明见表2-1。
表2-1 算术运算符说明

对于“/”运算,就算分子、分母都是int,返回的也将是浮点数。例如:

Python支持不同的数字类型相加,它使用数字类型强制转换的方式来解决数字类型不一致的问题。也就是说,它会将一个操作数转换成与另一个操作数相同的数据类型。
如果有一个操作数是复数,则另一个操作数被转换为复数:

整数转换为浮点数:

Python代码中一般一行就是一条语句,但是可以使用斜杠(\)将一条语句分为多行显示。例子代码如下:

2.3.2 字符串
可以使用方法strip()去掉字符串首尾的空格或者指定的字符。

使用方法split()将句子分成单词。例如下面的代码中,Mary是一个单一的字符串。尽管这是一个句子,但这些词语并没有表示成严谨的单位。为此,需要一种不同的数据类型,即字符串列表,其中每个字符串对应一个单词。使用方法split()可把句子切分成单词:

split()方法根据空格拆分Mary,返回的结果是Mary中的单词列表。此列表包含函数len()演示的5个项目。对于Mary,函数len()返回字符串中的字符数(包括空格)。

空白字符包括空格' '、换行符'\n'和制表符'\t'等。.split()分隔这些字符的任何组合序列:

通过提供可选参数,.split('x')可用于在特定子字符串'x'上拆分字符串。如果没有指定'x',.split()只是在所有空格上分割,如上所示。

但是如果想将一个字符串拆分成一个字符列表呢?在Python中,字符只是长度为1的字符串。函数list()将字符串转换为单个字母的列表:

如果有一个单词列表,可以使用.join()方法将它们重新组合成一个单独的字符串。在“分隔符”字符串'x'上调用,'x'.join(y)连接列表y中由'x'分隔的每个元素。下面,mwords中的单词用空格连接回句子字符串:

也可以在空字符串''上调用该方法作为分隔符。效果是列表中的元素连接在一起,元素之间没有任何内容。下面,将一个字符列表放回到原始字符串中:

一个字符串取子串的例子代码如下:

使用函数ord()和函数chr()实现字符串和整数之间的相互转换:

2.3.3 数组
可以使用array(数组)存储同样数据类型的数值类型。通过import array导入Python的数组类型,就可以使用array类型。
例如:
