流畅的Python阅读笔记

在这里插入图片描述

五一快乐的时光总是飞快了,不知多久没有拿起键盘写文章了,最近公司有Python的需求,想着复习下Python吧,然后就买了本Python的书籍 书名: 《流畅的Python》
在这里插入图片描述

下面是整理的一个阅读笔记,大家自行查阅,主要是做一个记录,记录下自己认为重要的部分


第1章 Python数据模型

  1. 特殊方法(xx)的存在是为了被Python解释器调用的,你自己并不需要调用它们。
  2. 很多时候,特殊方法的调用是隐式的,比如 for i in x: 这个语句,背后其实用的是iter(x),而这个函数的背后则是x.iter()方法。
  3. 元对象所指的是那些对建构语言本身来讲很重要的对象。

第2章 序列构成的数组

  1. 容器序列:list、tuple和collections.deque这些序列能存放不同类型的数据。
  2. 扁平序列:str、bytes、bytearray、memoryview和array.array,这类序列只能容纳一种类型。
  3. 容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是而不是引用。换句话说,扁平序列其实是一段连续的内存空间。
  4. 可变序列:list、bytearray、array.array、collections.deque和memoryview。
  5. 不可变序列:tuple、str和bytes。
  6. 生成器表达式:逐个产出元素,而不是一次性产出一个含有所有元素的列表。
  7. 元组拆包可以应用到任何可迭代对象上。
  8. 切片:对seq[start:stop:step]进行求值的时候,Python会调用seq.getitem(slice(start,stop,step))。

第3章 字典和集合

  1. 什么是可hash的数据类型,原子不可变数据类型(str、bytes和数值类型)都是可散列类型。
  2. 字典推导(dictcomp)可以从任何以键值对作为元素的可迭代对象中构建出字典。
  3. 集合中的元素必须是可散列的,set类型本身是不可散列的,但是frozenset可以。
  4. 反汇编函数:dis.dis
  5. 散列表给dict带来的优势和限制:
    1. 键必须是可散列的
    2. 字典在内存上的开销巨大:由于字典使用了散列表,而散列表又必须是稀疏的,这导致它在空间上的效率低下。举例而言,如果你需要存放数量巨大的记录,那么放在由元组或是具名元组构成的列表中会是比较好的选择。
    3. 键查询很快:dict的实现是典型的空间换时间

第4章 文本和字节序列

  • 略过

第5章 一等函数

  1. 编程语言理论家把“一等对象”定义为满足下述条件的程序实体:
    1. 在运行时创建
    2. 能赋值给变量或数据结构中的元素
    3. 能作为参数传给函数
    4. 能作为函数的返回结果
  2. 接受函数为参数,或者把函数作为结果返回的函数是高阶函数
  3. all和any也是内置的归约函数。
  4. Python简单的句法限制了lambda函数的定义体只能使用纯表达式。换句话说,lambda函数的定义体中不能赋值,也不能使用while和try等Python语句。
  5. Python数据模型文档列出了7种可调用对象
    1. **用户定义的函数:**使用def语句或lambda表达式创建。
    2. 内置函数:使用C语言(CPython)实现的函数,如len。
    3. 内置方法:使用C语言实现的方法,如dict.get。
    4. 方法:在类的定义体中定义的函数。
    5. **类:**调用类时会运行类的__new__方法创建一个实例,然后运行__init__方法,初始化实例,最后把实例返回给调用方。
    6. 类的实例:如果类定义了__call__方法,那么它的实例可以作为函数调用。
    7. **生成器函数:**使用yield关键字的函数或方法。调用生成器函数返回的是生成器对象。
  6. 不仅Python函数是真正的对象,任何Python对象都可以表现得像函数。为此,只需实现实例方法__call__。
  7. 函数内省??
  8. 虽然Guido明确表明,Python的目标不是变成函数式编程语言,但是得益于operatorfunctools等包的支持,函数式编程风格也可以信手拈来。

第6章 使用一等函数实现设计模式

  • 略过

第7章 函数装饰器和闭包

  1. 函数装饰器用于在源码中“标记”函数,以某种方式增强函数的行为。这是一项强大的功能,但是若想掌握,必须理解闭包。
  2. 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。
  3. 严格来说,装饰器只是语法糖。如前所示,装饰器可以像常规的可调用对象那样调用,其参数是另一个函数。
  4. 函数装饰器在导入模块时立即执行,而被装饰的函数只在明确调用时运行。这突出了Python程序员所说的导入时和运行时之间的区别。
  5. 装饰器函数与被装饰的函数在同一个模块中定义。实际情况是,装饰器通常在一个模块中定义,然后应用到其他模块中的函数上。
  6. **闭包(closure)**是一种函数,它会保留定义函数时存在的自由变量的绑定,这样调用函数时,虽然定义作用域不可用了,但是仍能使用那些绑定。
    1. image.png
  7. Python3引入了nonlocal声明。它的作用是把变量标记为自由变量,即使在函数中为变量赋予新值了,也会变成自由变量。
  8. Python内置了三个用于装饰方法的函数:property、classmethod和staticmethod。
  9. 单分派泛函数??
  10. 叠放装饰器:把@d1和@d2两个装饰器按顺序应用到f函数上,作用相当于f=d1(d2(f))
  11. 参数化装饰器

第8章 对象引用、可变性和垃圾回收

  1. ==运算符比较两个对象的值(对象中保存的数据),而is比较对象的标识。
  2. 元组的值会随着引用的可变对象的变化而变化。元组中不可变的是元素的标识。
  3. 浅复制:即复制了最外层容器,副本中的元素是源容器中元素的引用。如果有可变的元素,可能就会导致意想不到的问题。
  4. 不要使用可变类型作为参数的默认值。

第9章 符合Python风格的对象

  1. classmethodstaticmethod

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/681536.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker部署Metabase

文章目录 Docker安装MetabaseCentOS7安装Docker获取最新的 Docker 镜像启动Metabase容器在Metabase初始化时查看日志访问Metabase Metabase 的 ClickHouse 驱动程序安装环境简介删除容器创建容器下载click house驱动放入驱动重启容器将元数据库连接到 ClickHouse报错解决 Docke…

JAVA链表相关习题2

1.反转一个单链表。 . - 力扣(LeetCode) //2在1前面 //1在3前面 //ListNode curhead.next //head.nextnull(翻转后头节点变为最后一个节点) // while(cur ! null) { //记录 当前需要翻转节点的下一个节点 ListNode curNext cu…

Python——Fastapi管理平台(打包+优化)

目录 一、配置多个表 1、后端项目改造 2、导包报错——需要修改(2个地方) 3、启动后端(查看是否有问题) 4、配置前端 二、打包——成exe文件(不包含static文件)简单 1、后端修改 2、前端修改 3、运行打包命…

RisingWave基本操作

什么是RisingWave RisingWave 是一款基于 Apache 2.0 协议开源的分布式流数据库。RisingWave 让用户使用操作传统数据库的方式来处理流数据。通过创建实时物化视图,RisingWave 可以让用户轻松编写流计算逻辑,并通过访问物化视图来对流计算结果进行及时、…

|Python新手小白中级教程|第二十三章:列表拓展之——元组

文章目录 前言一、列表复习1.索引、切片2.列表操作字符3.数据结构实践——字典 二、探索元组1.使用索引、切片2.使用__add__((添加元素,添加元素))3.输出元组4.使用转化法删除元组指定元素5.for循环遍历元组 三、元组VS列表1.区别2.元组(tuple&#xff0…

vant中van-tabs使用中的小问题

1. 怎么去掉默认选中的效果 van-tabs默认情况下启用第一个标签,实际开发中不满足需求,想要点击后再进行选中 解决办法 首先,在标签组数中,添加一个占位标签在样式中设置首个标签不显示代码如下: //js 实际有意思的…

OPC :快速上手

本系列为OPC技术的快速上以及持续研究和技术实战专栏,将不定期更新。 本章节提供OPC系列技术博文的快速导航。 《OPC服务器简介和入门介绍》 《物联网平台如何为OPC服务器创造新生命力》 《OPC服务器开发之WtOPCSvr——开发文档(1)》 《OPC服…

自动控制原理学习--平衡小车的控制算法(二)

上一节 在matlab建模,这一节PID控制. 一、模型 直接先放一张matlab simulink的模型(只有直线速度环和平衡环,串联PID),就在上一节的基础上加了两个PID。 二、PID控制 PID的好处就是可以不用动力学建模(当…

Kubernetes学习-集群搭建篇(一) 搭建Master结点

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Kubernetes渐进式学习-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1. 前言 2. 集群搭建方式 3. 环境说明 4. 利用kubeadm初始化Ma…

【强训笔记】day14

NO.1 思路&#xff1a;用一个哈希表&#xff0c;先遍历s1&#xff0c;统计哈希表内的字符个数&#xff0c;在遍历s2&#xff0c;s2中的字符在哈希表中减去&#xff0c;如果哈希表中的字符个数小于0那么就输出No。 代码实现&#xff1a; #include <iostream> #include&…

文件名长度调整:指定文件重命名长度,优化你的文件存储体验

在数字时代&#xff0c;文件存储和管理是我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着文件数量的增加&#xff0c;文件名长度的管理变得尤为重要。合理的文件名长度不仅可以提高文件检索的效率&#xff0c;还能优化整体的存储体验。 为什么文件名长度很重要&am…

【UnityRPG游戏制作】Unity_RPG项目_玩法相关※

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…