我是靠谱客的博主 长情紫菜,最近开发中收集的这篇文章主要介绍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. 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. 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. 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 Python读书笔记(1)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部