
python语法
文章平均质量分 85
QsingH
这个作者很懒,什么都没留下…
展开
-
Python 深入探究字典和集合的实现原理
字典和集合的实现原理泛映射类型只有可散列的数据类型才能用作这些映射里的键。如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不变的,而且这个对象需要实现 __hash__()方 法。另外可散列对象还要有 __eq__()方法,这样才能跟其他键做比较。因此,原子不可变数据类型是可散列的。用户自定义的类型的对象一般是可散列的,散列值就是id()的返回值,但如果其实现了__eq__()方法,并且方法中用到了这个对象的内部状态,那么只有当这些内部状态都不可变时,对象才是可散列的。字典的常用构原创 2020-08-19 08:45:12 · 481 阅读 · 0 评论 -
Python 函数装饰器和闭包
函数装饰器和闭包装饰器简介装饰器是一个可调用对象,其参数是另一个函数,作用是返回一个被处理过或替换的函数。它属于一种语法糖,以下两种写法是等价的# 1@decoratedef target(): print('running target')#2def target(): print('running target') target = decorate(target)装饰器的执行时机python中,装饰器在被装饰的函数定义后立即运行。这通常发生在导入模块时。使用原创 2020-08-19 08:43:20 · 172 阅读 · 0 评论 -
Python 序列解包中的tricky point
序列解包中的tricky point奇怪的现象先来看一个违反直觉的程序a = [1,2,3,4,5,6,7,8,9]b = a.copy()a[:-3], a[-3:] = a[-3:],a[:-3]b[:6], b[6:] = b[6:],b[:6]这里乍看起来a和b的运行结果应该是一样的,可是实际运行程序却得到了这样的结果简化问题为了细探发生了什么,我决定分解这个式子,一步一步地进行。然而这次竟然又得到了与刚刚不同的结果。不过仔细观察之下原因已经十分清楚了,本次的程序和前一个程序原创 2020-08-19 08:37:38 · 282 阅读 · 0 评论