
案例需求
有如下三个变量:
python
num1 = 1000
num2 = int("1000")
num3 = num1
它们"看起来"都是 1000。编写程序回答下面问题:
- 用
==运算符判断num1和num2的值相等吗? - 用
is运算符判断num1和num2是同一个对象吗? - 用
is运算符判断num1和num3是同一个对象吗? - 用
is运算符判断num1和num2不是同一个对象吗? - 定义一个值是
None的变量result,判断它"是不是None"?
案例实现
第 1 步 :定义三个变量,给它们分别赋值。其中 int("1000") 会把字符串 "1000" 变成一个新的整数对象。
python
num1 = 1000
num2 = int("1000")
num3 = num1
第 2 步 :用 == 判断"值"是否相等,用 is 判断"是不是同一个对象"。
python
print("num1 与 num2 的值相等吗(==)? ", num1 == num2)
print("num1 与 num2 是同一个对象吗(is)? ", num1 is num2)
print("num1 与 num3 是同一个对象吗(is)? ", num1 is num3)
print("num1 与 num2 不是同一个对象吗? ", num1 is not num2)
第 3 步 :None 表示"什么都没有"。判断一个变量是不是 None,标准写法是用 is 运算符。
python
result = None
print("result 是 None 吗(用 is 判断)? ", result is None)
print("result 的值等于 None 吗(用 == 判断)?", result == None)
完整代码:
python
num1 = 1000
num2 = int("1000")
num3 = num1
print("num1 与 num2 的值相等吗(==)? ", num1 == num2)
print("num1 与 num2 是同一个对象吗(is)? ", num1 is num2)
print("num1 与 num3 是同一个对象吗(is)? ", num1 is num3)
print("num1 与 num2 不是同一个对象吗? ", num1 is not num2)
result = None
print("result 是 None 吗(用 is 判断)? ", result is None)
print("result 的值等于 None 吗(用 == 判断)?", result == None)
运行结果:
num1 与 num2 的值相等吗(==)? True
num1 与 num2 是同一个对象吗(is)? False
num1 与 num3 是同一个对象吗(is)? True
num1 与 num2 不是同一个对象吗? True
result 是 None 吗(用 is 判断)? True
result 的值等于 None 吗(用 == 判断)? True
案例解析
==比较"内容",is比较"身份" :变量可以看成一个个的盒子。==打开盒子比"里面装的 1000 一样不一样";is不看内容,只问"这两个名字指的是不是同一个盒子"。- 为什么
num1 is num2是False:num1 = 1000直接得到一个盒子;num2 = int("1000")是调用函数新建 了一个盒子,虽然里面的值也是 1000,但盒子不是同一个,所以is为False。 - 为什么
num1 is num3是True:num3 = num1只是把num1这个"盒子的名字"又写了一遍,两个名字指向同一个盒子,所以is为True。 - 用
is运算符判断None:None在 Python 里只有一个,所以判断一个变量是不是None,查的就是"身份"。规范写法是data is None,反过来写就是data is not None。 - 不要用
is去判断两个数字或字符串是否相等。两个值相等的数字,is有时是True有时是False(取决于 Python 内部的缓存策略),容易写出"时好时坏"的程序;想比是否相等就用==,只有判身份才用is。
相关练习
一、题目
1.(选择题) 关于 is 和 ==,下列说法正确的是( )。
- A.
is比较两个值是否相等 - B.
==比较两个变量是不是同一个对象 - C.
is比较两个变量是不是同一个对象 - D. 两者完全一样,随便用哪个都行
2.(填空题) 判断变量 data 是不是 None,推荐写成 data ________ None(填写运算符)。
3.(判断题) 如果两个变量用 == 比较的结果是 True,那么它们用 is 比较的结果也一定是 True。( )
4.(简答题) 已知 num1 = 1000、num2 = int("1000"),请分别写出"比较二者值是否相等"和"比较二者是否为同一个对象"的两个表达式,并说明运行结果。
二、参考答案与解析
1. 答案:C
解析:is 是身份运算符 ,比较两个变量是否指向同一个对象;== 是比较运算符,比较两个值是否相等。两者作用不同,不能混用。
2. 答案:is
解析:None 在整个 Python 里只有一个,判断它用身份运算符最准确,规范写法是 data is None。
3. 答案:错误(×)
解析:值相等不代表是同一个对象。例如 num1 == num2 为 True,但 num1 is num2 为 False,两个盒子里的内容一样,盒子本身却不是同一个。反过来,如果 is 为 True,那么 == 一定也为 True。
4. 答案:num1 == num2 为 True;num1 is num2 为 False
解析:比较值相等写 num1 == num2,结果是 True;比较是否为同一个对象写 num1 is num2,结果是 False。因为 num2 是用 int("1000") 现场新造出来的对象,虽然值相同,但和 num1 不是同一个。
声明:本文部分内容由人工智能辅助生成。