★本小节是《Python 完全自学教程》第三章的内容,之前已经发布了第一小节,请参阅:http://www.itdiffer.com/self-learning.html”
数学中的“小数”,在 Python 中一般用“浮点数类型”表示(与浮点数对应的是“定点数”,建议读者参考3.1.1节【自学建议】的方法研究此概念),按照下面的方式,即可创建一个浮点数对象:
>>> pi = 3.14
>>> type(pi)
<class 'float'>
通过键盘输入3.14
,然后用内置函数 type()
得到了此对象的类型 <class 'float'>
,即 float
类型,翻译为“浮点数”类型。
3.1.1节中提到过 int
类型有与之对应的内置函数 int()
,同样,float
类型也有与之对应的内置函数 float()
,通过它也能够创建浮点数。
>>> f = float()
>>> f
0.0
>>> type(f)
<class 'float'>
此处用 float()
创建的浮点数是 0.0
(用变量 f
引用),它跟 0
有区别吗?类似的问题还可以是 1.0
(浮点数),与 1
(整数),有区别吗?
从纯粹数学角度看,
,注意:这是数学上的比较结果,如果搬到 Python 中,会这样:
>>> 1.0 = 1
File "<stdin>", line 1
1.0 = 1
^
SyntaxError: cannot assign to literal
为什么会这样?
数学中的 = 表示两个数值相等,而 Python 语言中的 =
符号则表示的是一个变量与一个对象建立引用关系(详见第2章2.3节),如 pi = 3.14
。所以在 Python 语言中,如果判断两个值是否相等,不得不使用另外一个符号:==
。输入方法:连续输入两个英文状态下的=
符号,中间不能有空格和其他符号。
>>> 0.0 == 0
True
>>> 1.0 == 1
True
返回值是 True
(这是布尔值,参阅3.7节),说明 ==
符号两侧的数字是相等的(在 ==
两侧,与数字之间不论是否有空格,均不影响计算结果,但有空格更“好看”)。但是,1.0
和 1
不是同一种类型(一个是浮点数类型,另外一个是整数类型),也就是说它们不是“同一个”对象。
在 Python 语言中,要想判断“两个”对象是不是“同一个”——有点拗口的说辞,用代码来说话就容易理解了:
>>> id(1)
140696716712240
>>> id(1.0)
140696719619056
这里使用了一个内置函数 id()
,它的返回值是参数对象的内存地址——简单理解,就是数字 1
在内存中的存储位置编号,并且用十进制的形式表示。如果“两个”对象的内存地址一样,那么它们是“同一个”对象。这就如同在软件系统中,用身份证号作为注册用户的唯一标识,如果身份证号相同,就认为是同一个用户(前提是身份证号与个人是一对一的关系)。
尽管 1.0
和 1
不是同一对象,但从数学和日常习惯的角度看,“ 1.0
就是 1
”,比如财务人员填写金额的时候,通常将
元人民币,一般会写成
元人民币。于是乎就有一种需要,判断 1.00
这个浮点数是不是 1
——有点绕,慢慢读,你能明白我的意思。
>>> num = 1.23
>>> num
1.23
>>> num.is_integer() # (3)
False
>>> fee = 1.00
>>> fee
1.0
>>> fee.is_integer() # (4)
True
在上述操作中,
这个浮点数显然“不是”
。注释(3)的含义是调用了浮点数对象 num
(完整地表述,应该是“变量 nun
所引用的浮点数对象”,可以简化为“浮点数对象 num
”)的 is_integer()
方法,来判断该浮点数“是不是”对应的整数,返回值是 False
,说明“不是”;注释(4)的返回值是 True
,说明变量 fee
引用的浮点数 1.00
“就是” 1
。
请读者在阅读上文的时候注意,“是”、“不是”、“就是”等均用了引号,意思是根据数学和日常习惯进行判断,而非 Python 中根据该对象的内存地址判断是否为同一个对象。