分享3 个Python冷知识
转自/Python编程时光
三个比较冷门的知识。
第一个:神奇的字典键
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" 覆盖了.这个 StackOverflow的 回答(https://stackoverflow.com/a/32211042/4354153) 漂亮的解释了这背后的基本原理.
第二个:异常处理中的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
以上就是今天的分享,如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
——END——
最近发现一个点外卖每顿饭都能少花5-20元的宝藏号。
就是她,↓点击下面名片关注公众号↓
进入公众号点击菜单领取红包最低5元,最高56元!
分享3 个Python冷知识相关推荐
- 链式比较、奇怪的字母、有趣的import...Python冷知识(六)
本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第六篇. 谈谈 Python 那些不为人知的冷知识(一) 谈谈 Python 那些不为人知的冷知识(二) 谈谈 P ...
- 空字符串计数、让字典可排序...Python冷知识(五)
本文转载自Python编程时光(ID: Python-Time) 冷知识系列,直至今日,已经更新至第五篇.前四篇给你准备好了,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) ...
- 反转字符串/列表、改变递归次数限制、else用法...Python 冷知识(四)
本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第四篇.前三篇传送门在此,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) 谈谈 Pyth ...
- for死循环、怪异字符串、两次return……Python冷知识(三)
本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第三篇.前两篇传送门小明给你准备好了,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) 谈 ...
- python冷知识_python冷知识
省略号也是对象 在python中一切皆对象,省略号(...)也是一个对象注意:只能是三个点的省略号 在python中叫做Ellipsis 在python3中能直接得到它 print(...) prin ...
- 你所不知道的 Python 冷知识!(建议收藏)
01. 省略号也是对象 ... 这是省略号,在Python中,一切皆对象.它也不例外. 在 Python 中,它叫做 Ellipsis . 在 Python 3 中你可以直接写-来得到这玩意. > ...
- python的运算符号使等式成立_你所不知道的 Python 冷知识!(二)(建议收藏)
首发于微信公众号:Python编程时光 ' 每周三更新五个冷知识,欢迎前往订阅! 01. 交互式"_"操作符 对于 _ ,我想很多人都非常熟悉. 给变量取名好艰难,用 _: 懒得长 ...
- Python冷知识之神秘漫画!
欢迎加入QQ学习交流群,与我们一起学习,一起进步吧! 群号:225361733 可以QQ扫一扫加入群聊哦! 我是小豆,我--又来写没技术的文章了! 那么------ 当然是吃屎--哦不是,是讲冷知识! ...
- 那些让你惊掉下巴到肚皮上的python冷知识(一)
一.我不是我 现在,我们在交互模式下分别定义两个变量:a,b,他们的值都等于200: 然后判断a和b是否是引用的同一对象,并打印出来: 很显然a和b引用的是同一对象,所以返回的结果为true 是不是觉 ...
最新文章
- MSSQL 访问Mysql
- Windows下Unity5x的安装
- opc服务器组态文件已写保护_iscada电力组态监控源代码,电力组态版,只有opc驱动版本...
- mac securecrt程序无响应_如何重置mac上的系统管理控制器smc教程
- 如何使用无线连接来使Android调试手机
- nagios插件脚本check_linux_stats.pl 安装
- 3G中的A-GPS移动定位技术
- 「CF1154F」Shovels Shop【背包DP】
- 网页版番茄时钟的制作——Pomodoro Clock
- 使用一个git仓库管理多个项目
- 现在的SQLSERVER数据库监控软件有哪些?
- “Xilinx ZYNQ+TCP通信+Python上位机”实现实时视频传输系统
- Titan框架入门指南:Titan如何工作
- C++友元函数实现两个复数相加
- HTTP 错误 404.2 - Not Found(由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。)
- 【CodingNoBorder - 06】无际软工队 - 会议纪要博客列表
- 搭建局域网,通过DHCP实现电脑自动获取IP地址
- 互联网时代内容分发四宗罪
- Acrel-EIoT 能源物联网开放平台
- [转]BEHAVOUR TREE2
热门文章
- Centos7 单台服务器搭建Elasticsearch6.0.1集群
- 百度代码规范 -- PHP
- CSS使用display:incline与float:left的区别:脱离文档流 参差不齐
- PHP的Excel操作
- PHP的max_execution_time
- thinkphp5 获取当前的域名
- linux双核对线程,Linux检查双核(及多核)CPU信息
- html任务3 模拟滚动条,vue3系列:vue3.0自定义虚拟滚动条V3Scroll|vue3模拟滚动条组件...
- Tomcat9 无法启动组件[Connector[AJP/1.3-8009]]
- 【uniapp】组件封装与引用