zoukankan      html  css  js  c++  java
  • 流畅的python读书笔记

    1.虽然也可以用列表推导来初始化元组、 数组或其他序列类型, 但是生成器表达式是更好的选择。 这是因为生成器表达式背后遵守了迭代器协议, 可以逐个地产出元素, 而不是先建立一个完整的列表, 然后再把这个列表传递到某个构造函数里。 前面那种方式显然能够节省内存。生成器表达式的语法跟列表推导差不多, 只不过把方括号换成圆括号而已。
    2.Python标准库用C实现了丰富的序列类型。

    容器序列:list、tuple和collections.deque这些序列能存放不同类型的数据。

    扁平序列:str、bytes、bytearray、memoryview和array.array,这类序列只能容纳一种类型数据。

    容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。换句话说,扁平序列其实是一段连续的内存空间。

    序列类型还能按照能否被修改来分类。

    可变序列:list、bytearray、array.array、collections.deque和memoryview。

    不可变序列:tuple、str和bytes。

     3.python中除了dict外在collections模块中,还有defaultdict可以给不存在的键设默认值,OrderedDict使得键能够保持顺序,ChainMap可以容纳数个不同的映射对象,然后在进行键查找操作的时候,这些对象会被当做一个整体被逐个查找,直到键被找到为止。Counter给键准备一个整数计数器,每次更新一个键的时候都会增加这个计数器,UserDict让用户可以继承写子类。

     4.由于字典使用了散列表,而散列表又必须是稀疏的,这导致它在空间上的效率低下。举例而言,如果你需要存放数量巨大的记录,那么放在由元祖或是具名元祖构成的列表中会是比较好的选择。用元组取代字典就能节省空间的原因有两个:其一是避免了散列表所耗费的空间,其二是无需把记录中字段的名字在每个元素里都存一遍。

    5."字符"的最佳定义是Unicode字符。str对象中获取的元素是Unicode字符。Unicode标准把字符的标识和具体的字节表述进行了如下明确区分。a.字符的标识,即码位,是0~1114111的数字,在Unicode标准中以4~6个十六进制数字表示,而且加前缀“U+”。例如,字母A的码位是U+20AC。b.字符的具体表述取决于所用的编码。编码是在码位和字节序列之间转换时使用的算法。例如,在UTF-8编码中,A(U+0041)的码位编码成单个字节x41。把码位转换成字节序列的过程时编码;把字节序列转换成码位的过程是解码。多数非UTF编解码器只能处理Unicode字符的一小部分子集。把文本转换成字节序列时,如果目标编码中没有定义某个字符,那就会抛出UnicodeEncodeError异常。不是每一个字节都包含有效地ASCII字符,也不是每一个字符序列都是有效地UTF-8或UTF-16。因此,把二进制序列转换成文本时,如果假设是这两个编码中的一个,遇到无法转换的字节序列时会抛出UnicodeDecodeError。

  • 相关阅读:
    python正则表达式
    装饰器和生成器和迭代器
    进一步认识函数
    python:关于函数的初认识
    python的 随手记----字符编码与转码
    python:元祖与字典与集合的粗浅认识
    python:模块导入之浅认识
    java socket编程
    Spring框架下的单元测试方法
    ModelDriven机制及其运用
  • 原文地址:https://www.cnblogs.com/ningjing213/p/13153279.html
Copyright © 2011-2022 走看看