前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Python完全自学教程》免费在线连载3.6

《Python完全自学教程》免费在线连载3.6

作者头像
老齐
发布2022-04-01 10:03:51
3990
发布2022-04-01 10:03:51
举报
文章被收录于专栏:老齐教室

3.6 比较

数学中的“比较”是很单纯的,就是衡量两个数字哪个大、哪个小。但是 Python 语言中,除了兼顾数学上的“比较”之外,还把事情搞得复杂了一些,且看本节揭示其复杂性。

3.6.1 比较运算符

3.2节学了算术运算符,除此之外,数学中还有“比较运算符”,在 Python 中如何实现?也很直接,请读者观察键盘(如图3-6-1所示),其中有输入比较符号的的键,按下“ Shift ”键,然后按下标有“ < ”或“ > ”的键,即可输入小于号或大于号——要在英文状态。

图3-6-1 比较符号键

比如,在 Python 交互模式中输入:

代码语言:javascript
复制
>>> 3.14 < 2.72   # (1)
False
>>> 3.14 > 2.72   # (2)
True

注释(1)和(2)是比较表达式,即两个数字对象进行比较的不等式。如果不等式成立,就返回True ,否则返回 False

除了注释(1)(2)表达式中的小于号和大于号之外,其他比较运算符列在表3-6-1中,请读者参考。

表3-6-1 比较运算符

运算符

描述

实例 (设 a=10,b=20)

==

等于,比较对象是否相等

(a == b) 返回 False

!=

不等于,比较两个对象是否不相等

(a != b) 返回 True

>

大于,返回 a 是否大于 b

(a > b) 返回 False

<

小于,返回 a 是否小于 b

(a < b) 返回 True

>=

大于等于,返回 a 是否大于等于 b

(a >= b) 返回 False

<=

小于等于,返回 a 是否小于等于 b

(a <= b) 返回 True

is

判断对象的同一性

(a is b) 返回 False

Is not

对象同一性判断的否定

(a is not b) 返回 True

表3-6-1中所列的各项比较运算符,不仅能够用于比较数字,还能应用于后续的其他对象类型的比较——这就是 Python 中“比较”的一种复杂性体现。

3.6.2 相等和同一

表3-6-1中显示的“ == ”符号,是用来比较两个对象是否相等,请注意区别于数学中习惯的“ = ”符号。在 Python 中(乃至于所有高级语言中),“ = ”用于赋值语句(参阅第6章6.1.1节),表示一个变量和一个对象之间建立引用关系。

代码语言:javascript
复制
>>> a = 9    # 赋值语句,变量和对象建立引用关系
>>> b = 9.0
>>> a == b   
True

a == b 即比较变量 a 引用的对象与变量 b 引用的对象是否相等。

在3.1.2节业已学习到了 == 的含义,并且同时提到了“相等”并不意味着是“同一个对象”,如上述示例中的整数 9 和浮点数 9.0 。下面要着重要说明的“相等”和“同一”的区别。

如3.1.2节所述,在 Python 中两个对象是否“同一”,可以看它们的内存地址是否相同,比如:

代码语言:javascript
复制
>>> a = 256
>>> b = 256
>>> id(a) == id(b)    # (3)
True

内置函数 id() 返回了参数对象的内存地址,注释(3)的表达式返回了 Ture ,说明 ab 引用的对象内存地址相同——这就是重复3.1.2节的内容,读者不要急躁,看下面的:

代码语言:javascript
复制
>>> c = 257
>>> d = 257
>>> id(c) == id(d)
False
>>> id(c)
140374295342960
>>> id(d)
140374295340752

是不是很神奇?同样是整数,这时候两个变量分别引用了两个不同的对象。

如果查看浮点数——所有浮点数都如此。例如:

代码语言:javascript
复制
>>> f = 3.14
>>> g = 3.14
>>> id(f)
140374295339504
>>> id(g)
140374295339312

变量 f 引用了浮点数对象 3.14 ,Python 在内存中创建了该对象;变量 g 再引用一个浮点数对象,只不过此对象的值还是 3.14,Python 在内存中又创建了一个新对象,而没有将变量 g 指向前面那个 3.14 对象。前面看到的变量 cd 也如此,分别引用两个不同的 257 对象。但是变量 ab 则不然,虽然操作与后面的二者类似,但它们引用了同一个 256 对象。

这是因为 Python 中做了一个规定,将常用的值(整数 -5256)默认保存在内存中,从而节省内存开支。如果变量引用这些值,就直接指向内存中已有的,不再新建。所以,才出现上面的操作结果。

判断两个对象是否相等,使用 == 符号。虽然注释(3)的表达式也能判断两个对象是否“同一”,但显得不那么“近乎自然”——编程语言的发展方向就是越来越趋近自然语言。于是,Python 提供了一个用于判断对象是否“同一”的关键词 is

代码语言:javascript
复制
>>> c is d
False
>>> a is b
True

is 用于判断两侧的对象是否是同一个,返回 False,说明不是同一个对象,否则返回 True 。因此 is 也被称为身份运算符

自学建议 “内存”,全称“内部存储器”。计算机的存储系统可以分为两大类:内部存储器和外部存储器。其中内部存储器接受 CPU 的控制与管理,只能暂存数据信息。 此外,“内存”这个词在某些语境下,还是“主板上的RAM”的代称。 请读者查阅有关资料,了解存储器知识。”

“相等”和“同一”的上述探讨,不仅仅存在于数字对象,后续要学习的其他类型的对象,也有同样问题,请读者届时要特别注意辨识 is== 的作用效果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.6 比较
    • 3.6.1 比较运算符
      • 3.6.2 相等和同一
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档