更多课程 选择中心


Python培训

400-111-8989

Python 中 3 个不可思议的返回


第一个:神奇的字典键

some_dict = {}

    some_dict[5.5] = "Ruby"

    some_dict[5.0] = "JavaScript"some_dict[5] = "Python"

Output:

>>> some_dict[5.5]

    "Ruby"

    >>> some_dict[5.0]

    "Python"

    >>> some_dict[5]

    "Python"

"Python" 消除了 "JavaScript" 的存在?

说明:

Python 字典通过检查键值是否相等和比较哈希值来确定两个键是否相同.

具有相同值的不可变对象在Python中始终具有相同的哈希值.

注意: 具有不同值的对象也可能具有相同的哈希值(哈希冲突).

>>> 5 == 5.0

    True

    >>> hash(5) == hash(5.0)

    True

当执行 some_dict[5] = "Python" 语句时, 因为Python将 5 和 5.0 识别为 some_dict 的同一个键, 所以已有值 "JavaScript" 就被 "Python" 覆盖了。

第二个:异常处理中的return

def some_func():

        try:

           return from_try

        finally:

           return from_finally

Output:

>>> some_func()

      from_finally

说明:

当在 "try...finally" 语句的 try 中执行 return, break 或 continue 后, finally 子句依然会执行.

函数的返回值由最后执行的 return 语句决定. 由于 finally 子句一定会执行, 所以 finally 子句中的 return 将始终是最后执行的语句.

第三个:相同对象的判断

class WTF:

     pass

Output:

>>> WTF() == WTF() # 两个不同的对象应该不相等

    False

    >>> WTF() is WTF() # 也不相同

    False

    >>> hash(WTF()) == hash(WTF()) # 哈希值也应该不同

    True

    >>> id(WTF()) == id(WTF())

    True

说明:

当调用 id 函数时, Python 创建了一个 WTF 类的对象并传给 id 函数. 然后 id 函数获取其id值 (也就是内存地址), 然后丢弃该对象. 该对象就被销毁了.

当我们连续两次进行这个操作时, Python会将相同的内存地址分配给第二个对象. 因为 (在CPython中) id 函数使用对象的内存地址作为对象的id值, 所以两个对象的id值是相同的.

综上, 对象的id值仅仅在对象的生命周期内唯一. 在对象被销毁之后, 或被创建之前, 其他对象可以具有相同的id值.

那为什么 is 操作的结果为 False 呢? 让我们看看这段代码.

class WTF(object):

    def __init__(self): print("I")

    def __del__(self): print("D")

Output:

>>> WTF() is WTF()

    I

    I

    D

    D

    False

    >>> id(WTF()) == id(WTF())

    I

    D

    I

    D

    True

正如你所看到的, 对象销毁的顺序是造成所有不同之处的原因.

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:我没有基础,能否学会Python?
下一篇:Python|如何让文件读取不再乱码

如何自学Python?

说一说python中的几个基础语法

为什么Python类语法应该不同?

0基础入门Python,3 个常识点必须先了解!

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省