Python 中有 三个不可思议的返回功能

开发 后端
今天给大家分享 3 个比较冷门的知识。来看看是什么吧。

今天给大家分享 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

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

原文链接:​​https://github.com/leisurelicht/wtfpython-cn​

以上就是今天的分享,如果你觉得文章还不错,请大家  给个三连哈 ,

责任编辑:庞桂玉 来源: 菜鸟学Python
相关推荐

2013-10-10 13:07:25

方物

2017-03-21 08:52:20

神经网络声誉

2021-11-10 06:38:01

Python链式操作

2011-07-18 13:35:14

HTML 5

2011-02-23 08:50:22

C#.NETdynamic

2013-07-31 15:06:58

未来的WebWebGLWeb

2010-07-15 16:21:03

不可思议的服务器

2020-07-02 15:40:11

Spring BootJar包Java

2014-01-14 10:33:42

开源硬件开源

2017-11-08 14:07:45

数据库MySQL慢查分析

2023-04-06 09:44:00

ChatGPT行业质量

2012-05-16 17:28:32

智能手机

2014-07-26 22:18:51

2012-02-13 11:01:27

N9Android 4.0

2016-07-06 11:56:52

思科汉堡光纤骨干网

2024-04-07 00:00:00

亿级数据ES

2018-07-10 09:18:36

人工智能智能出行大数据

2023-04-04 22:31:11

GPT-5人工智能

2021-03-03 07:12:47

Windows10操作系统微软

2014-11-13 10:08:21

点赞
收藏

51CTO技术栈公众号