【Python 3这件小事】2.内置数据类型(一)
2.1 主要的数据类型
Python 有多种内置数据类型。以下是比较重要的一些:
- Booleans[布尔型] 或为
True[真]
或为False[假]
。 - Numbers[数值型] 可以是 Integers[整数](
1
和2
)、Floats[浮点数](1.1
和1.2
)、Fractions[分数](1/2
和2/3
)。 - Strings[字符串型] 是 Unicode 字符序列,例如: 一份 html 文档。
- Bytes[字节] 和 Byte Arrays[字节数组], 例如: 一份 jpeg 图像文件。
- Lists[列表] 是值的有序序列。
- Tuples[元组] 是有序而不可变的值序列。
- Sets[集合] 是装满无序值的包裹。
- Dictionaries[字典] 是键值对的无序包裹。
Strings[字符串]和 Bytes[字节串]比较重要,也相对复杂,足以开辟独立章节予以讲述。让我们先看看其它类型。
2.2 布尔类型
布尔类型或为真或为假。Python 有两个被巧妙地命名为 True
和 False
的常量,可用于对布尔类型的直接赋值。表达式也可以计算为布尔类型的值。在某些地方(如 if
语句),Python 所预期的就是一个可计算出布尔类型值的表达式。这些地方称为 布尔类型上下文环境。事实上,可在布尔类型上下文环境中使用任何表达式,而 Python 将试图判断其真值。在布尔类型上下文环境中,不同的数据类型对于何值为真、何值为假有着不同的规则。(看过本章稍后的实例后,这一点将更好理解。)
比如,看一下的代码片段:
1 if size < 0: 2 raise ValueError('number must be non-negative')
size 是整数, 0 是整数,而 <
是数字运算符。size < 0
表达式的结果始终是布尔值。可在 Python 交互式 shell 中自行测试下结果:
>>> size = 1 >>> size < 0 False >>> size = 0 >>> size < 0 False >>> size = -1 >>> size < 0 True
由于 Python 2 的一些遗留问题,布尔值可以当做数值对待。True
为 1
;False
为 0 。
>>> True + True 2 >>> True - False 1 >>> True * False 0 >>> True / False Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: int division or modulo by zero
2.3 数值类型
数值类型是可畏的。有太多类型可选了。Python 同时支持 Integer[整型] 和 Floating Point[浮点型] 数值。无任何类型声明可用于区分;Python 通过是否有 小数 点来分辨它们。
>>> type(1) ① <class 'int'> >>> isinstance(1, int) ② True >>> 1 + 1 ③ 2 >>> 1 + 1.0 ④ 2.0 >>> type(2.0) <class 'float'>
① | 可以使用 type() 函数来检测任何值或变量的类型。正如所料,1 为 int 类型。 |
② | 同样,还可使用 isinstance() 函数判断某个值或变量是否为给定某个类型。 |
③ | 将一个 int 与一个 int 相加将得到一个 int 。 |
④ |
将一个 以进行加法运算;然后返回一个 |
2.3.1 将整数强制转换为浮点数及反向转换
正如刚才所看到的,一些运算符(如:加法)会根据需把整数强制转换为浮点数。也可自行对其进行强制转换。
>>> float(2) ① 2.0 >>> int(2.0) ② 2 >>> int(2.5) ③ 2 >>> int(-2.5) ④ -2 >>> 1.12345678901234567890 ⑤ 1.1234567890123457 >>> type(1000000000000000) ⑥ <class 'int'>
① | 通过调用float() 函数,可以显示地将 int 强制转换为 float 。 |
② | 毫不出奇,也可以通过调用 int() 将 float 强制转换为 int 。 |
③ | int() 将进行取整,而不是四舍五入。 |
④ | 对于负数,int() 函数朝着 0 的方法进行取整。它是个真正的取整(截断)函数,而不是 floor[地板]函数。 |
⑤ | 浮点数精确到小数点后 15 位。 |
⑥ | 整数可以任意大。 |
2.3.2 常见数值运算
对数值可进行各种类型的运算。
>>> 11 / 2 ① 5.5 >>> 11 // 2 ② 5 >>> −11 // 2 ③ −6 >>> 11.0 // 2 ④ 5.0 >>> 11 ** 2 ⑤ 121 >>> 11 % 2 ⑥ 1
① | / 运算符执行浮点除法。即便分子和分母都是 int ,它也返回一个 float 浮点数。 |
② | // 运算符执行古怪的整数除法。如果结果为正数,可将其视为朝向小数位取整(不是四舍五入),但是要小心这一点。 |
③ | 当整数除以负数, // 运算符将结果朝着最近的整数“向上”四舍五入。从数学角度来说,由于 −6 比 −5 要小,它是“向下”四舍五入,如果期望将结果取整为 −5 ,它将会误导你。 |
④ | // 运算符并非总是返回整数结果。如果分子或者分母是 float ,它仍将朝着最近的整数进行四舍五入,但实际返回的值将会是 float 类型。 |
⑤ | ** 运算符的意思是“计算幂”,112 结果为 121 。 |
⑥ | % 运算符给出了进行整除之后的余数。11 除以 2 结果为 5 以及余数 1 ,因此此处的结果为 1 。 |
2.3.3 分数
Python 并不仅仅局限于整数和浮点数类型。它可以完成你在高中阶段学过、但几乎已经全部忘光的所有古怪数学运算。
>>> import fractions ① >>> x = fractions.Fraction(1, 3) ② >>> x Fraction(1, 3) >>> x * 2 ③ Fraction(2, 3) >>> fractions.Fraction(6, 4) ④ Fraction(3, 2) >>> fractions.Fraction(0, 0) ⑤ Traceback (most recent call last): File "<stdin>", line 1, in <module> File "fractions.py", line 96, in __new__ raise ZeroDivisionError('Fraction(%s, 0)' % numerator) ZeroDivisionError: Fraction(0, 0)
① | 为启用 fractions 模块,必先引入 fractions 模块。 |
② | 为定义一个分数,创建一个 Fraction 对象并传入分子和分母。 |
③ | 可对分数进行所有的常规数学计算。运算返回一个新的 Fraction 对象。2 * (1/3) = (2/3) |
④ | Fraction 对象将会自动进行约分。(6/4) = (3/2) |
⑤ | 在杜绝创建以零为分母的分数方面,Python 有着良好的敏感性。 |
2.3.4 三角函数
还可在 Python 中进行基本的三角函数运算。
>>> import math >>> math.pi ① 3.1415926535897931 >>> math.sin(math.pi / 2) ② 1.0 >>> math.tan(math.pi / 4) ③ 0.99999999999999989
① | math 模块中有一个代表 π 的常量,表示圆的周长与直径之比率(圆周率)。 |
② | math 模块包括了所有的基本三角函数,包括:sin() 、 cos() 、tan() 及像 asin() 这样的变体函数。 |
③ | 然而要注意的是 Python 并不支持无限精度。tan(π / 4) 将返回 1.0 ,而不是 0.99999999999999989 。 |
2.3.5 布尔上下文环境中的数值
零值是 false[假],非零值是 true[真]。
可以在 if
这样的 布尔类型上下文环境中使用数值。零值是 false[假],非零值是 true[真]。
>>> def is_it_true(anything): ① ... if anything: ... print("yes, it's true") ... else: ... print("no, it's false") ... >>> is_it_true(1) ② yes, it's true >>> is_it_true(-1) yes, it's true >>> is_it_true(0) no, it's false >>> is_it_true(0.1) ③ yes, it's true >>> is_it_true(0.0) no, it's false >>> import fractions >>> is_it_true(fractions.Fraction(1, 2)) ④ yes, it's true >>> is_it_true(fractions.Fraction(0, 1)) no, it's false
① | 您知道可以在 Python 交互式 Shell 中定义自己的函数吗?只需在每行的结尾按 回车键 ,然后在某一空行按 回车键 结束。 |
② | 在布尔类型上下文环境中,非零整数为真;零为假。 |
③ | 非零浮点数为真; 0.0 为假。请千万小心这一点!如果有轻微的四舍五入偏差(正如在前面小节中看到的那样,这并非不可能的事情),那么 Python 将测试 0.0000000000001 而不是 0 ,并将返回一个 True 值。 |
④ | 分数也可在布尔类型上下文环境中使用。无论 n 为何值,Fraction(0, n) 为假。所有其它分数为真。 |