2022年 11月 5日

Python3高级教程(第三版)读书笔记

好记性不如烂笔头,对之前阅读书籍进行梳理与总结,此文为《Python3高级教程第三版》阅读笔记。

文章目录

  • 第一章 基础知识
  • 第三章 函数

第一章 基础知识

将迭代器链接在一起

import itertools
itertools.chain(range(3), range(4), range(5))
  • 1
  • 2

itertools模块包含了许多用途不同的实用程序,对于chain函数而言,它可以接收任意数量的迭代器,并返回一个新的生成器,该生成器将依此迭代每个迭代器/

集合的一些操作:
add():添加元素
update(): 将新集合的内容添加到已有的集合当中
remove():从集合中移除特定的元素,如果该元素一开始不在集合当中,则会引发KeyError
discard():工作原理和remove()类似,但是如果指定的元素不在集合当中,不会引发异常
pop():集合中没有真正意义上的队尾,因此pop()方法会随机选择一个元素并返回,以便在集合之外使用。
clear(): 清空集合元素
注意:空集合的表现形式是set()而不是{}. 因为Python需要维护(保持)集合和字典的区别。为了保持与引入集合文字之前编写的旧代码的兼容性,空的花括号仍然专用于字典。

除了原地修改内容这种方法外,Python还提供了将两个集合以某种方式进行组合以返回新集合的方法
union(): 两个集合求并集合,类似OR运算,是用管道字符(|)表示
intersection():两个集合求交集,类似AND元算,用&符号表示
difference():两个集合求差集,类似减法,用运算符号(-)表示
symmetric_difference():两个集合求对称差集,类似XOR,用插入符号(^)表示
issubset()与issuperset(): 判断一个集合是否是另一个集合的子集或者超集

从即将发布的版本中导入:
__future__模块

使用__all__进行自定义导入
如果在导入时,使用了通配符号*,那么这就是__all__选项发挥作用的唯一时机,这取决于你是否希望所有函数都可用,还是只使用其中一部分。但PEP8是不建议使用*导入的,因为可能引发命名空间冲突。

import_lib模块
调用其import_module()函数,可以实现与__import__()一样的效果,import_module()接收模块路径
注意相对导入不能直接在交互式解释器中使用,解释器运行的模块实际上并不在文件系统中,因此并不存在可以使用的相对路径。

大多数编程语言都实现了某种形式的随机或者伪随机数生成器,python也是如此,但是python生成的随机数的基本算法不如其他语言那么稳健。因此美国国际标准与技术研究院(NIST)实现了随机信标,每隔60s向连接用户发送一个真正的随机数。

第三章 函数

弄清楚一些基本概念
必须的参数
可选的参数
可变位置参数
可变关键字参数

偏函数
functional.partial()
函数柯里化(curry):看起来与预加载参数非常类似
自省

装饰器
在处理大型代码库时,需要通过许多不同的函数,来执行一组任务,通常是当前函数执行某些特定的操作的前后执行,比如装饰器的一些常见的应用场景:

  • 访问控制
  • 清理临时对象
  • 错误处理
  • 缓存
  • 日志记录
    在以上的所有这些场景中,都需要函数真正执行之前或者之后执行一些样板代码,与其将代码复制到每个函数中,不如只编写一次并简单地应用到需要它们的每个函数中,这正是装饰器的用武之地。
    从技术上讲,设计装饰器的只有一个简单的目的,就是输入一个函数并返回另一个函数。

闭包
闭包简单地说,就是在另一个函数内部定义的函数,可以传递到这个函数之外。
在这里插入图片描述