is身份运算符用于比较两个对象的存储单元,判断两个标识符是不是引用自一个对象。
x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False。
is与==的区别: is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
重要事情说3遍: Python中 万物皆对象!万物皆对象!万物皆对象! 每个对象包含3个属性: id,type,value id 就是对象地址,通过内置函数 id() 查看; type就是对象类型,通过内置函数 type() 查看;value就是对象值。 Python 交互式界面为了实现对内存的有效利用,对小整数 [-5,256] 内的整数进缓存,不在该范围内的不会缓存。Python脚本没有这个限制。
False, 0, '', [], (), set() 都可视为False,但不是None
可变对象 空[] 、 空{} 和 空set 通过 is 函数后得到为 False, 不可变对象 空()和空'' is 函数后得到为 True。
不可变对象 id() 都相同。可变对象的id() 不同。
进行如下测试
print("=====")
if ():
print(1)
if {}:
print(2)
if []:
print(3)
if set():
print(4)
if 0:
print(5)
print("=====")
if () is ():
print(1)
if {} is {}:
print(2)
if [] is []:
print(3)
if set() is set():
print(4)
if '' is '':
print(5)
print("=====")
if () == ():
print(1)
if {} == {}:
print(2)
if [] == []:
print(3)
if set() == set():
print(4)
if '' == '':
print(5)
print("=====")
print(type(()))
print(type({}))
print(type([]))
print(type(set()))
print(type(''))
print(type(0))
print("=====")
print(id(()))
print(id({}))
print(id([]))
print(id(set()))
print(id(''))
print(id(0))
print("=====")
a = ()
b = ()
print(id(a))
print(id(b))
a = ""
b = ''
print(id(a))
print(id(b))
a = []
b = []
print(id(a))
print(id(b))
验证结果如下
=====
=====
1
5
=====
1
2
3
4
5
=====
<class 'tuple'>
<class 'dict'>
<class 'list'>
<class 'set'>
<class 'str'>
<class 'int'>
=====
2191978856520
2191980581096
2191979336264
2191983363016
2191979074160
140712265085168
=====
2191978856520
2191978856520
2191979074160
2191979074160
2799171490376
2799171490888
捕获父类异常,子类异常可以正常抛出
class ParentException(Exception):
def __init__(self):
Exception.__init__(self, "Parent Exception")
class ChildException(ParentException):
def __init__(self):
Exception.__init__(self, "Child Exception")
def test_Exception():
"""
捕获父类异常,子类异常可以正常抛出
:return:
"""
try:
raise ParentException
except ParentException as e:
print("catch Exception:%s" % e)
try:
raise ChildException
except ParentException as e:
print("catch Exception:%s" % e)
try:
raise ParentException
except ChildException as e:
print("catch Exception:%s" % e)