卧槽Python还有这些特性2奇怪的字典

2020-12-23 19:50 Python开发者

(给Python开发者加星标,提升Python技能

英文:Satwik Kansal,翻译:暮晨

Python开发者整理自 GitHub

【导读】:Python 是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。但有的时候 Python 的一些输出结果对于初学者来说似乎并不是那么一目了然。

GitHub 有个仓库收集 Python 中那些难以理解和鲜为人知的功能特性,并尝试讨论这些现象背后真正的原理!

虽然有些例子并不一定会让你觉得“卧槽”(WTF),但它们依然有可能会告诉你一些你所不知道的 Python 有趣特性。我觉得这是一种学习编程语言内部原理的好办法,而且我相信你也会从中获得乐趣!

如果你是一位经验比较丰富的 Python 程序员,你可以尝试挑战看是否能一次就找到例子的正确答案。你可能对其中的一些例子已经比较熟悉了,那这也许能唤起你当年踩这些坑时的甜蜜回忆。

今天我们的主角是字典,让我们开始吧!

奇怪的字典!

1.

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将 55.0 识别为 some_dict 的同一个键, 所以已有值 "JavaScript" 就被 "Python" 覆盖了.
  • 这个 StackOverflow的 回答[1] 漂亮地解释了这背后的基本原理.

Return return everywhere!

def some_func():
    try:
        return 'from_try'
    finally:
        return 'from_finally'

Output:

>>> some_func()
'from_finally'

说明:

  • 当在 "try...finally" 语句的 try 中执行 return, breakcontinue 后, finally 子句依然会执行.
  • 函数的返回值由最后执行的 return 语句决定. 由于 finally 子句一定会执行, 所以 finally 子句中的 return 将始终是最后执行的语句.

参考资料

[1]

https://stackoverflow.com/a/32211042/4354153


- EOF -

推荐阅读  点击标题可跳转

1、你知道和不知道的Python字典都在这里!!

2、Python 优雅的操作字典

3、如何优雅的操作 Python 字典


觉得本文对你有帮助?请分享给更多人

推荐关注「Python开发者」,提升Python技能

图片

点赞和在看就是最大的支持❤️

本文章转载自公众号:PythonCoder

首页 - Python 相关的更多文章: