【Python 3这件小事】2.内置数据类型(一)

2.1 主要的数据类型

Python 有多种内置数据类型。以下是比较重要的一些:

  1. Booleans[布尔型] 或为 True[真] 或为 False[假]
  2. Numbers[数值型] 可以是 Integers[整数](1 和 2)、Floats[浮点数](1.1 和 1.2)、Fractions[分数](1/2 和 2/3)。
  3. Strings[字符串型] 是 Unicode 字符序列,例如: 一份 html 文档。
  4. Bytes[字节] 和 Byte Arrays[字节数组], 例如: 一份 jpeg 图像文件。
  5. Lists[列表] 是值的有序序列。
  6. Tuples[元组] 是有序而不可变的值序列。
  7. Sets[集合] 是装满无序值的包裹。
  8. 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 为 1False 为 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 + 12
>>> 1 + 1.02.0
>>> type(2.0)
<class 'float'>
可以使用 type() 函数来检测任何值或变量的类型。正如所料,1 为 int 类型。
同样,还可使用 isinstance() 函数判断某个值或变量是否为给定某个类型。
将一个 int 与一个 int 相加将得到一个 int 。

将一个 int 与一个 float 相加将得到一个 float 。Python 把 int 强制转换为 float

 以进行加法运算;然后返回一个 float 类型的结果。

 

 

 

2.3.1 将整数强制转换为浮点数及反向转换

正如刚才所看到的,一些运算符(如:加法)会根据需把整数强制转换为浮点数。也可自行对其进行强制转换。

>>> float(2)                ①
2.0
>>> int(2.0)                ②
2
>>> int(2.5)                ③
2
>>> int(-2.5)               ④
-2
>>> 1.123456789012345678901.1234567890123457
>>> type(1000000000000000)  ⑥
<class 'int'>
通过调用float() 函数,可以显示地将 int 强制转换为 float
毫不出奇,也可以通过调用 int() 将 float 强制转换为 int 。
int() 将进行取整,而不是四舍五入。
对于负数,int() 函数朝着 0 的方法进行取整。它是个真正的取整(截断)函数,而不是 floor[地板]函数。
浮点数精确到小数点后 15 位。
整数可以任意大。

 

 

 

 

 

2.3.2 常见数值运算

对数值可进行各种类型的运算。

>>> 11 / 25.5
>>> 11 // 25
>>> −11 // 2    ③
−6
>>> 11.0 // 25.0
>>> 11 ** 2121
>>> 11 % 21
/ 运算符执行浮点除法。即便分子和分母都是 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) 为假。所有其它分数为真。
posted @ 2013-03-23 22:41  Sayary  阅读(437)  评论(0编辑  收藏  举报