Skip to content

Latest commit

 

History

History
164 lines (138 loc) · 3.02 KB

重要细节.md

File metadata and controls

164 lines (138 loc) · 3.02 KB

python的重要细节

is与==

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)