我是靠谱客的博主 落寞夏天,这篇文章主要介绍Fluent Python读书笔记(1),现在分享给大家,希望可以做个参考。

前几天入手了Fluent Python,觉得还是有必要写一下读书笔记的。

大致的介绍一下这本书的结构,噢,豆瓣给这版9.4的评分,所以书是真的好。大致分为六部分,第一部分对Python的数据类型进行一个概览;第二部分是序列,映射,集合;第三部分是一些函数的特性,包括闭包装饰器等特性;第四部分是类的构建;第五部分包括生成器,协程和yield等语法;最后一部分比较偏底层,包括一些类装饰器和元类的高级概念。

知识点比较零散,在这里用列表的方式记录:

数据模型

  1. Magic method的存在是为了被Python解释器调用的,你自己不需要调用,因此没有object.__len__()这一说,而是使用len(object)。
  2. 对于内置类型,使用len方法,CPython会抄近路使用PyVarObject里面的ob_size属性,直接读取的话会比使用方法快得多。
  3. Python有一个名为"repr"的内置函数,用来表示一个对象的字符串表达形式,而repr使用的是__repr__这个magic方法来得到一个字符串的表达形式,同时如果一个对象没有__str__函数,而Python又需要调用它的时候,解释器会用__repr__作为代替。

序列

  1. 容器序列(list,tuple,collections.deque)与扁平序列(str,bytes,array.array)。
  2. 如果使用的列表推导的代码超过了两行,可能就要考虑需不需要使用for重写。
  3. Python2中出现的变量泄露的问题,在Python3中已经被正确的修复了。
  4. 复制代码
    1
    2
    3
    4
    In [1]: (i for i in range(3)) Out[1]: <generator object <genexpr> at 0x0000026411BB88B8> In [2]: tuple(i for i in range(3))

    如果不使用tuple(),元素推导只会以生成器的类型返回

  5. 元组拆包有一个很优雅的应用,即不适用中间变量来交换两个变量的值。

  6. 在切片和区间操作中忽略最后一个元素是Python等很多语言的风格,不仅可以快速看到切片和区间返回的元素的个数,同时可以快速计算切片和区间的长度。除此之外,使用任意一个下标分割序列也是常用的操作。

  7. *+都有会创建一个新序列;而对于可变序列(list),a+=b实现了就地加法;当然对于不可变序列肯定是不支持的。

  8. 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    In [16]: t = (1,2,[3]) In [17]: t[2]+=[4] --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-17-97bdecf87d05> in <module> ----> 1 t[2]+=[4] TypeError: 'tuple' object does not support item assignment In [18]: t Out[18]: (1, 2, [3, 4])

    经典谜题,t[2]既发生了改变,同时也出现了报错。这是因为“TOP = [3] += [4]”这个操作可以完成,而"t[2] = TOP"这个操作由于t是不可变的,所以失败了。因此增量赋值并不是一个原子操作。但是这里有个问题,为什么通过t[2].append()就可以添加元素而不报错呢。通过id我们可以看到不管怎么操作t[2]的地址是不变的。

  9. 复制代码
    1
    2
    3
    4
    5
    6
    In [26]: a,b = [21,341,2],[21,341,2] In [27]: a.sort() In [28]: sorted(b) Out[28]: [2, 21, 341]

    .sort会返回None,实现就地排序,这也是就地操作的惯例,好让你知道没有产生一个新的列表;而sorted()会返回新的列表。

  10. 可选参数“key”属性大有作用,key = len和key = str或者key = int得到的结果可能是完全不同的。

  11. 数组不再支持list.sort()的方法。

  12. collections.deque中,maxlen可以决定队列最大长度,溢出时再添加会删除原元素。

最后

以上就是落寞夏天最近收集整理的关于Fluent Python读书笔记(1)的全部内容,更多相关Fluent内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(106)

评论列表共有 0 条评论

立即
投稿
返回
顶部