![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
流畅的python
文章平均质量分 92
Murphy_31
这个作者很懒,什么都没留下…
展开
-
流畅的python:序列的修改、散列和切片
第10章 序列的修改、散列和切片文章目录第10章 序列的修改、散列和切片1、初始化-向下兼容2、Vector表示形式3、协议和鸭子类型4、动态存取属性5、可散列的实现5.1 __hash__的实现5.2 __eq__的改进6、小结前面我们讲到二维向量Vector,接下来我们扩展到高维向量,引出序列的高级操作。1、初始化-向下兼容兼容性是我们在开发程序时必须要考虑的问题。前面我们通过Vector(3,4)来实现初始化,但是序列类型的构造方法最好接受可迭代的对象为参数,也就说,通过Vector([3,4原创 2020-07-30 21:07:45 · 212 阅读 · 0 评论 -
流畅的python:符合Python风格的对象-Part2
4、可散列的Vector到现在为止,我们的Vector是不可散列的,也就是说没有对应的哈希值:>>>v = Vector(3, 4)>>>hash(v)TypeError: unhashable type: 'Vector'要想将Vector实例变成可散列的,必须使用__hash__、以及__eq__方法,而且要保证向量不可变。想要实现hash很简单,只要在类内增加__hash__方法以及__eq__方法即可,官方文档中说到:也就是说,如果要定义__ha原创 2020-07-22 15:12:34 · 201 阅读 · 0 评论 -
流畅的python:序列构成的数组-Part2
第二章 序列构成的数组-Part21、序列的增量赋值增量赋值运算符为+=和*=,笔者以前只知道a+=b等价于a=a+b,剩下的并没有深入的思考,看了这本书以后我才知道原来其表现形式也有区分:而其表现取决于它们的第一个操作对象。下面我们以+=为例,说明增量赋值后续的原理与表现形式:如果你仔细看过第一章,应该知道+=运算符本质上调用的是__iadd__特殊方法,但是如果一个类没有实现这个方法的...原创 2020-04-21 14:38:31 · 255 阅读 · 0 评论 -
流畅的python:符合Python风格的对象-Part1
符合Python风格的对象1、对象表示形式每门面向对象的语言至少都有一种获取对象的字符串表示形式的标准方式。Python提供了两种方式。repr()以便于开发者理解的方式返回对象的字符串表示形式。str()以便于用户理解的方式返回对象的字符串表示形式。前面我们也已经讲过,两者的内部实现是通过__repr__和__str__特殊方法。除此之外还会用到另外两个特殊方法:__bytes__和__format__。__bytes__方法与__str__方法类似:bytes()函数调用它获取对原创 2020-07-16 16:11:53 · 183 阅读 · 0 评论 -
memoryview的用法
本来第一次看《流畅的python》觉得这部分没用,就跳过去,后面又出现,回头看还是一知半解,查了诸多资料,好像有一点明白了,立下帖子。1、memoryviewmemoryview() 函数返回给定参数的内存查看对象(memory view)。所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问。可以简单理解为就是对内存地址的直接访问。memoryview可以对对象进行索引或者切片,不过切片的返回结果为一个子memoryview对象:import a原创 2020-07-03 10:28:52 · 3736 阅读 · 1 评论 -
流畅的python:文本和字节序列-Part1
文本和字节序列(上)人类使用文本,计算机使用字节序列。本章将要讨论Unicode字符串、二进制序列,以及在二者之间转换时使用的编码。深入理解Unicode对你可能十分重要,也可能无关紧要,这取决于Python编程的场景。说到底,本章涵盖的问题对只处理ASCII文本的程序员没有影响。但是或许你跟我一样执着于输入输出的完美,或者有更多使用字符串的复杂场景,或许你应该看一看这一章。1、基础知识计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说原创 2020-06-04 16:15:41 · 251 阅读 · 0 评论 -
流畅的python:函数装饰器-Part2
上一节我们讲到了装饰器的基础知识,并且讲到了functools.wraps内置装饰器,由于接下来的内容比较复杂,所以分进行说明。好了,让我们更深入地挖掘装饰器吧!4、标准库中的装饰器常见的装饰器是functools.wraps,它的作用是协助构建行为良好的装饰器,我们已经说过了,剩余标准库中最值得关注的两个装饰器是lru_cache和全新的singledispatch,赶紧来看看吧。4.1 使用functools.lru_cache做备忘functools.lru_cache是非常实用的装饰器,它实原创 2020-06-03 10:50:04 · 218 阅读 · 0 评论 -
流畅的python:函数装饰器-Part1
函数装饰器(上)就像我前面所将的那样,我不止一次在面试中被问到装饰器,这章我会为你揭开它的面纱。1、装饰器基础知识不要把装饰器想的那么复杂,装饰器就是一个可调用的对象,只不过其参数是一个函数对象(如果你看过上一章,应该知道函数就是一个对象,可以作为参数进行传递),和我们往函数里面传入列表对象,整数对象并没有什么差别,我们先看一个简单的例子:# 示例1def deco(af): def inner(): print('来自inner函数的输出') print('de原创 2020-05-28 22:01:59 · 206 阅读 · 0 评论 -
流畅的python:函数中的闭包
闭包1、变量作用域在开始之前,我们先看下面的一道选择题:以下的三段代码中哪些会正常打印,而不会报错?# 代码Adef f(a): print(a) print(b)f(3)# 代码Bb = 6def f(a): print(a) print(b)f(3)# 代码Cb = 6def f(a): print(a) print(b) b = 3f(3)对于代码A来说,只有有点编程基础的都应该知道肯定会报错,因为并没有定义b原创 2020-05-27 19:48:31 · 270 阅读 · 0 评论 -
流畅的python:一等函数-Part2
把函数视作对象6、函数注解函数注解用于为函数声明中的参数和返回值附加元数据,例如下面代码的第一行def repeat(text: str, max_len: 'int>0' = 80) -> str: if max_len < 80: return text + '-' * (80 - max_len) else: return text函数声明中的各个参数可以在:之后增加注解表达式。如果参数有默认值,注解放在参数名和=号之间。如果原创 2020-05-25 11:10:07 · 281 阅读 · 0 评论 -
流畅的python:一等函数-Part1
把函数视作对象接下来简要发布的部分是重点内容,除了标记选读部分,其余的都很重要,我在面试的时候不止一次被问到函数装饰器,函数这部分是进阶的证明,所以重视起来吧。1、函数是一个对象先看下面的这个简单例子:def myprod(n): '''计算阶乘n!''' if n == 1: return 1 else: return n*myprod(n-1)我们生成了一个函数对象,三引号引起来的是函数的说明,当你调用myprod.__doc__属性时原创 2020-05-21 20:27:12 · 290 阅读 · 0 评论 -
流畅的python:集合
第三章 字典与集合(下)文章目录第三章 字典与集合(下)1. 集合2. 一个关于效率的实验3. 散列表4. 散列表算法5. dict的实现及其导致的后果6. set的实现以及导致的后果接上一篇:流畅的python:字典我们高中数学的第一节课就是集合,所以你对他不可能会陌生。python中除了内置的集合set外,还有另一个不可变的姊妹类型frozenset,接下来我们就看看她们。1. 集合...原创 2020-04-28 21:46:04 · 226 阅读 · 0 评论 -
流畅的python:字典
第三章 字典与集合文章目录第三章 字典与集合3.1 泛映射类型dict的祖先与后代可散列数据3.2 字典推导3.3 常见的映射方法用get和setdefault处理找不到的键\_\_missing\_\_(了解)3.4 字典的变种字典这个数据结构活跃在所有Python程序的背后,即便你的源码里并没有直接用到它。dict类型不但在各种程序里广泛使用,它也是Python语言的基石。模块的命名...原创 2020-04-24 21:09:22 · 192 阅读 · 0 评论 -
流畅的python:对象引用、可变性、垃圾回收-Part2
文章目录1、回顾2、函数参数3、del和垃圾回收4、弱引用5、不可变对象的陷阱(选读)1、回顾我们首先对上一部分的内容进行简单的回顾:变量的产生:这个地方是我觉得上一部分最重要的地方,一定要注意,python首先创建一个对象,然后变量名对其进行标注。对应于赋值语句中,先执行=号右侧的对象创建语句,然后将该对象绑定到-号左侧的变量名上。序列保存方式:python中大多数的序列保存的是子序列...原创 2020-04-18 12:04:08 · 334 阅读 · 0 评论 -
流畅的python:对象引用、可变性、垃圾回收-Part1
第八章 对象应用、可变性、垃圾回收-Part1文章目录第八章 对象应用、可变性、垃圾回收-Part11、到底什么是变量?2、标识、相等性和别名3、元组的相对不可变性4、浅复制5、深复制1、到底什么是变量?从一开始学python,你可能就知道,python中的一切都是对象,那变量到底跟对象有啥关系?我们先看这样的一个例子:class Onevar(): def __init__(se...原创 2020-04-17 17:28:10 · 220 阅读 · 0 评论 -
流畅的python:序列构成的数组-Part1
接下来我们进入本书的第二部分内容数据结构。首先我们将会从序列构成的数组讲起。第二章 序列构成的数组-Part1在python中,不管是哪种数据结构,字符串、列表、字节序列、数组、XML元素,抑或是数据库查询结果,它们都共用一套丰富的操作:迭代、切片、排序,还有拼接。深入理解Python中的不同序列类型,不但能让我们避免重新发明轮子,它们的API还能帮助我们把自己定义的API设计得跟原生的序列...原创 2020-04-10 11:22:06 · 204 阅读 · 0 评论 -
流畅的python-python 数据模型(魔法方法)
该博客系列是本人阅读Luciano Ramalho 的《流畅的python》的笔记或者思考,为了便于理解加入了部分自己的理解,由于水平有限,难免会有纰漏之处,欢迎指正。文章目录第一章 python 数据模型1.python中的魔法方法2. 如何使用特殊方法3.其余常用特殊方法4.为什么len不是普通方法?***引言:***在开始本章内容之前,请先思考这样一个问题,为什么在获取序列长度时,py...原创 2020-04-06 14:43:11 · 255 阅读 · 0 评论