您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

3 个不可思议的 Python 返回值

时间:2020-01-24 13:29:46  来源:  作者:
3 个不可思议的 Python 返回值

https://github.com/leisurelicht/wtfPython-cn

第一个:神奇的字典键

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的 回答(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,breakcontinue后,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

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



Tags:Python   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
什么是数据科学数据科学通常被描述为统计和编程的交集。在本文中,我们讲介绍如何在你的电脑上设置立专业数据科学环境,这样你就可以开始动手实践与流行的数据科学库!什么是...【详细内容】
2020-11-12   Python  点击:(1)  评论:(0)  加入收藏
背景今天双十一,昨晚有好多电商行业的 IT 工程师们挑灯夜战,为这个全民狂欢的购物节护航。还记得三年前我们公司一个产品上线前一周时,办公室内拉起“跟 Bug 死扛到底”的横幅,B...【详细内容】
2020-11-11   Python  点击:(4)  评论:(0)  加入收藏
编写一个 Python 程序,每次下载压缩包形式的文件后,自动将内部文件解压到当前文件夹后将压缩包删除,通过本案例可以学到的知识点:...【详细内容】
2020-11-10   Python  点击:(2)  评论:(0)  加入收藏
> Figure 1: The Monte Carlo Simulation method is used in many industries, from the stock market to finance, energy, banking, and other forecasting models. | So...【详细内容】
2020-11-10   Python  点击:(2)  评论:(0)  加入收藏
python中引号引起来的就是字符串索引索引(下标)通过索引下标可以精确的地位到某个元素 # 变量名未 titl的字符串title = 'python最NB'print(title[0])# 控制台输出 pp...【详细内容】
2020-11-05   Python  点击:(6)  评论:(0)  加入收藏
元素都为真接受一个可迭代对象,如果可迭代对象的所有元素都为真,那么返回 True,否则返回False 元素至少一个为真接受一个可迭代对象,如果可迭代对象里至少有一个元素为真,那么返...【详细内容】
2020-11-05   Python  点击:(6)  评论:(0)  加入收藏
当你学习不熟悉的新东西的时候,一旦发现某样东西有效,那么你就会坚持使用它而放弃探索更多的可能性。在Python中,那样东西就是列表。使用列表的感觉就像是在一直重复你最喜欢的...【详细内容】
2020-11-03   Python  点击:(3)  评论:(0)  加入收藏
有没有想过用python写一个文件管理程序?听起来似乎没思路?其实是可以的,因为python已经为你准备好了神器os.walk,进来看看吧!python中os.walk是一个简单易用的文件、目录遍历器,可...【详细内容】
2020-11-02   Python  点击:(4)  评论:(0)  加入收藏
说一下 python 一般工程的目录结构一般习惯这样规划目录,在开始一个工程前,最好先把目录结构规划好。一、为什么要有一个比较清晰的目录结构此处省略一万字......二、介绍一个...【详细内容】
2020-10-30   Python  点击:(9)  评论:(0)  加入收藏
Python就是把一些参数从一个函数传递到另一个函数,从而使其执行相应的任务。但是你有没有想过,参数传递的底层是如何工作的,原理又是怎样的呢?实际工作中,很多人会遇到这样的场景...【详细内容】
2020-10-29   Python  点击:(5)  评论:(0)  加入收藏
本篇文章介绍了爬虫中验证码的处理方式, 并把这些功能封装起来,供我们使用, 涉及到百度AIP的调用方式, 以及一个最新的开源库muggle识别库的使用,欢迎阅读,点赞,收藏! 目录: 学会调用...【详细内容】
2020-10-29   Python  点击:(4)  评论:(0)  加入收藏
如何理解“栈”?关于“栈”,我有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中...【详细内容】
2020-10-28   Python  点击:(6)  评论:(0)  加入收藏
步骤1:基础我们首先学习Python的基础知识——变量、数据类型和操作符。还要学习循环和决策制定等概念: Python Variables Python Variable Scope Data Types in...【详细内容】
2020-10-28   Python  点击:(1)  评论:(0)  加入收藏
前言嗯,我们都知道Zoom是一个视频会议应用程序,它允许我们参加/主持会议。由于新冠的情况,视频会议应用的使用也急剧增加,这成为了一种新的常态,有时这些连续的在线课程变得很麻...【详细内容】
2020-10-20   Python  点击:(7)  评论:(0)  加入收藏
上班都快一周了,一直想更新,奈何小伙还没有从假期的快乐中缓过来,今天终于耐下心来更新一小篇。抠一下某品会的JS代码,接着使用抠取的JS代码加密密码进行登录。友情提示:为避免不...【详细内容】
2020-10-16   Python  点击:(6)  评论:(0)  加入收藏
python的三元表达式相信学过python的朋友都会。但是大部分学python的朋友不知道的是三元表达式还可以嵌套三元表达式。请看代码案例:cmp = lambda a, b: 0 if a == b else...【详细内容】
2020-10-14   Python  点击:(6)  评论:(0)  加入收藏
对程序员来说,Logging 是一种非常重要的功能。无论调试程序还是程序运行时的信息显示,Logging 都很有用。在本文中,我会演示为什么要使用以及如何使用 Python 中的 Logging...【详细内容】
2020-10-14   Python  点击:(9)  评论:(0)  加入收藏
1 说明====1.1 斐波那契数列的介绍。1.2 斐波那契数列是上帝的指纹,大自然中随处可见,目前广泛应用到黄金分割线的布局美和股市等预测等等。1.3 斐波那契数列的python的matplo...【详细内容】
2020-10-12   Python  点击:(25)  评论:(0)  加入收藏
引言Python是一种面向对象的高级动态编程语言,相比于其它如C/C++语言,具有上手快、代码少、开发效率高的特点,Qt是跨平台的C++图形用户界面应用程序开发框架,是当前主流的GUI开...【详细内容】
2020-10-10   Python  点击:(6)  评论:(0)  加入收藏
前言集成开发环境(IDE)允许开发人员用不同的编程语言运行代码,特别地,python IDE实际上是一种IDE,专门让您测试、运行和编辑用python语言编写的代码。当涉及到一个很大的项目时...【详细内容】
2020-10-09   Python  点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条