Python参考手册(第4版,Python 2.6)读书笔记

  1. 以交互方式使用Python时,特殊变量_用于保存最后一次运算的结果
  2. 字符串存储在一个以0开始、使用整数索引的字符序列中
  3. 要提取一个子字符串,可以使用切片运算符s[i:j]。这会提取字符串s中索引位置k处的所有字符,其中索引k的范围是i<=k<j。如果省略i,则假定使用字符串的起始位置,如果省略j,则假定使用字符串的结尾位置。
  4. 列表是任意对象的序列
  5. 集合用于包含一组无序的对象,集合中的元素不能重复
  6. 如果使用yield语句,可以让函数生成一个结果序列,而不仅仅是一个值。
  7. 任何使用yield的函数都称为生成器。调用生成器函数将创建一个对象,该对象通过连续调用next()方法生成结果序列。
  8. 可以把函数编写为一个任务,从而能处理发送给它的一系列输入,这类函数称为协程,可使用yield语句并以表达式(yield)的形式创建协程。
  9. 程序中使用的所有值都是对象。对象由内部数据和各种方法组成,这些方法会执行与这些数据相关的各种操作。
  10. class语句用于定义新的对象类型
  11. 每个方法中的第一个参数始终指向对象本身。该参数使用名称self。涉及对象属性的所有操作都必须显式引用self变量。
  12. import语句创建了一个新的命名空间,并在该命名空间中执行与.py文件相关的所有语句
  13. 函数、方法或类定义的前面可以使用一个特殊的符号,称为装饰器,其目的是修改定义后面的行为。装饰器使用@符号表示,必须放在单独的行上并且位于对应的函数、方法或类之前
  14. 可以使用多个装饰器,但每个装饰器必须位于不同的行上
  15. 程序中存储的所有数据都是对象。每个对象都有一个身份、一个类型和一个值
  16. 对象的身份可以看作是指向它在内存中所处位置的指针
  17. 对象的类型用于描述对象的内部表示及它支持的方法与操作
  18. 实例被创建之后,它的身份和类型就不可改变。如果对象的值是可以修改的,则称为可变对象。如果对象的值不可以修改,则称为不变对象。如果某个对象包含对其他对象的引用,则将其称为容器或集合
  19. 所有对象都有引用计数。无论是给一个对象分配一个新名称,还是将其放入一个容器(如列表、元祖或字典)中时,该对象的引用计数就会增加
  20. 当一个对象的引用计数为零时,它将被垃圾收集机制处理掉
  21. 浅复制将创建一个新对象,但它包含的是对原始对象中包含的项的引用
  22. 深复制将创建一个新对象,并且递归地复制它包含的所有对象
  23. 映射类型表示一个任意对象的集合,而且可以通过另一个几乎是任意键值的集合进行索引。和序列不同,映射对象是无序的。可以通过数字、字符串和其他对象进行索引。映射是可变的。
  24. 字典是唯一内置的映射类型,可以看作是Python中的散列表或关联数组。任何不可变对象都可以用作字典键值,如字符串、数组、元祖。包含可变对象的列表、字典或数组不能用作键,因为字典类型要求键值保持不变
  25. 集合是唯一项的无序集。对象不存在相关的键值。放入集合的项目必须是不可变的
  26. 实例方法是操作指定类的实例的方法。实例作为第一个参数传递给方法,该参数一般称为self
  27. 类方法把类本身当做一个对象进行操作,在第一个参数cls中将类对象传递给类方法
  28. 静态方法就是打包在类中的函数,它不能使用一个实例或类对象作为第一个参数
  29. 实例方法和类方法都是由一个类型为types.MethodType的特殊对象表示的
  30. 模块类型是一个容器,可保存使用import语句加载的对象
  31. __new__()类方法可以创建实例
  32. __init__()方法用于初始化对象的属性,在创建新对象后将立即调用
  33. 需要销毁对象时调用__del__()方法,只有该对象不再使用时才能调用该方法
  34. s[i]=x运算符将列表的元素i修改为引用对象x,同时增加x的引用计数
  35. 等于运算符(x==y)可以测试x和y的值是否相等。对于列表和元祖,只有其中的所有元素都相等,它们才相等
  36. 对于字典,只有当x和y的键值都相同,而且键相同的所有对象的值都相等才会返回True
  37. 两个集合相等的条件是用==运算符进行比较时,它们具有相同的元素
  38. 身份运算符(x is y 和x is not y)可以测试两个对象是否引用了内存中的同一个对象。一般而言,x==y,但x is not y
  39. 出现异常时,解释器将停止执行try代码块中的语句,并寻找可匹配该异常的except语句。如果找到,控制权就会传递给except子句中的第一条语句。执行完except子句后,控制权就会传递给出现在try-except代码块之后的第一条语句。否则,异常将传递给上一级出现try语句的代码块
  40. with obj语句在控制流进入和离开其后的相关代码块时,允许对象obj管理所发生的事情
  41. 显示地命名每个参数并为其指定一个值,这称为关键字参数。使用关键字参数时,参数的顺序无关紧要。但除非提供了默认值,否则必须显式地命名所有必需的函数参数。
  42. 位置参数和关键字参数可以出现在同一次函数调用中,前提是所有位置参数必须先出现,给所有非可选参数提供值,并且不能多次定义参数值。
  43. 关键字参数和可变长度参数列表可以一起使用,只要**参数出现在最后即可
  44. 调用函数时,函数参数仅仅是引用传入对象的名称
  45. return语句从函数返回一个值。如果没有指定任何值或者省略return语句,就会返回None对象。如果返回值有多个,可以把它们放在一个元祖中
  46. 每次执行一个函数时,就会创建新的局部命名空间。该命名空间代表一个局部环境,其中包含函数参数的名称和在函数体内赋值的变量名称。解析这些名称时,解释器将首先搜索局部命名空间。如果没有找到匹配的名称,它就会搜索全局命名空间。函数的全局命名空间始终是定义该函数的模块。如果解释器在全局命名空间中也找不到匹配值,最终会检查内置命名空间。如果仍然找不到,就会引发NameError异常
  47. 命名空间的特性之一是在函数中对全局变量的操作。在函数中对变量进行赋值时,这些变量始终绑定到该函数的局部命名空间中。
  48. 函数在Python中是第一类对象。可以把它们当作参数传递给其他函数,放在数据结构中,以及作为函数的返回结果
  49. 将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包
  50. 装饰器是一个函数,其主要用途是包装另一个函数或类。这种包装的首要目的是透明地修改或增强被包装对象的行为。表示装饰器的语法是@。装饰器可以接受参数
  51. 函数使用yield可以定义生成器对象。生成器是一个函数,它生成一个值的序列,以便在迭代中使用
  52. 调用next()时,生成器函数将不断执行语句,直至遇到yield语句为止。yield语句在函数执行停止的地方生成一个结果,直到再次调用next()。然后继续执行yield之后的语句。
  53. 生成器函数完成的标志是返回或引发StopIteration异常。
  54. 在函数内,yield语句还可以用作出现在赋值运算符右边的表达式,以这种方式使用yield语句的函数称为协程,它的执行是为了响应发送给它的值。
  55. 在协程中需要首先调用next(),这样协程才能执行可通向第一个yield表达式的语句。
  56. 生成器表达式是一个对象,它执行的计算与列表包含相同,但会迭代地生成结果。
  57. 函数属性保存在函数的__dict__属性中,__dict__属性是一个字典
  58. 类定义了一组属性,这些属性与一组叫做实例的对象相关且由其共享。类通常是由函数、变量和计算出的属性组成的集合。
  59. class语句本身并不创建该类的任何实例,类仅设置将在以后创建的所有实例都使用的属性
  60. 类中定义的函数称为实例方法。实例方法是一种在类的实例上进行操作的函数,作为第一个参数传递(self)。
  61. 类变量是可在类的所有实例之间共享的值。
  62. 类的实例是以函数形式调用类对象来创建的。这种方法将创建一个新实例,然后将该实例传递给类的__init__()方法。__init__()方法的参数包括新创建的实例self和在调用类对象时提供的参数
  63. __init__()内,通过将数学分配给self来将其保存到实例中。
  64. 继承是一种创建新类的机制,目的是专门使用或修改现有类的行为。通过继承创建类时,所创建的类将“继承”其基类定义 的属性。但是,派生类可以重新定义任何这些属性并添加自己的新属性。
  65. 子类可以定义自己的__init__()版本,从而向实例添加新属性
  66. 派生类定义__init__()时,不会自动调用基类的__init__()方法。因此,要由派生类调用基类的__init__()方法来对它们进行恰当的初始化。
  67. 动态绑定是指在不考虑实例类型的情况下使用实例。
  68. 静态方法是一种普通函数,就位于类定义的命名空间中。它不会对任何实例类型进行操作。使用@staticmethod装饰器进行定义。要调用静态方法,只需要类名作为它的前缀。无需向它传递任何其他信息。
  69. 类方法是将类本身作为对象进行操作的方法。类方法使用@classmethod装饰器定义,与实例方法不同,类是作为第一个参数(cls)传递的。
  70. 特性(property)是一种特殊的属性,访问它时会计算它的值
  71. @property装饰器支持以简单属性的形式访问后面的方法,无需像平常一样添加额外的()来调用该方法
  72. 实例的创建包括两个步骤:使用特殊方法__new__()创建新实例,然后使用__init__()初始化该实例
  73. 创建实例之后,实例将由引用计数来管理。如果引用计数到达0,实例将立即被销毁。
  74. 在类的内部,实例是使用字典来实现的,可以用实例的__dict__属性的形式访问该字典。这个字典包含的数据对每个实例而言都是唯一的
  75. 元类就是知道如何创建和管理类的对象
  76. 类装饰器是一种函数,它接受类作为输入并返回类作为输出
  77. 首次使用import加载模块时,它将创建新的命名空间,用作在相应源文件中定义对象的容器。在模块中定义的函数和方法在global语句时将访问该命名空间
  78. 模块是Python中的第一类对象,也就是说它们可以分配给变量,放置在列表等数据结构中,以及以数据的形式在程序中传递
  79. 每个模块中的代码仅加载和执行一次,无论import语句被使用了多少次。
  80. 每个模块定义一个包含模块名称的变量__name__。程序可以检查该变量,以确定它们在哪个模块中执行。解释器的顶级模块名为__main__。在命令行中指定或直接输入的程序将在main模块中运行。
  81. stdin是与提供给解释器的输入字符流相对应的文件对象。stdout是一个文件对象,接收由print生成的输出。stderr是接收错误信息的文件
  82. 默认编码使用sys.getdefaultencoding()查询
  83. pickle模块将对象序列化为一个字节流,这个字节流可以写入到文件并在以后进行还原。
  84. shelve模块类似于pickle,但它将对象保存在一个类似字典的数据库中。键必须是字符串,其次,shelve中存储的值必须与pickle兼容。
  85. 垃圾收集器用于收集像列表、元祖、字典和实例等对象中的循环。创建各种类型的容器对象时,将它们放在解释器内部的列表上。只要取消分配给容器对象的内存,就会将它们从该列表中删除。
  86. random模块提供各种用于生产伪随机数的函数,以及根据不同的实数分布来随机生成值的函数。
  87. 高级数据库API定义了一组用于连接数据库服务器、执行SQL查询并获得结果的函数和对象。其中有两个主要的对象:一个是用于管理数据库连接的Connection对象,另一个是用于执行查询的Cursor对象
  88. 为了连接到数据库,每个数据库模块都提供了一个模块级函数connect(parameters)。其中实际使用的参数因数据库不同而不同,但是通常包含数据源名称、用户名、密码、主机名称和数据库名称等信息
  89. 一个运行的程序称作进程。每个进程都有自己的系统状态,包括内存、已打开文件列表,用于跟踪正在执行的指令的程序计数器以及用于保存函数的局部变量的调用栈。
  90. TCP协议是一种面向连接的可靠协议,用于建立机器之间的双向通信流。UDP是一个较低级别的、以数据包为基础的协议(无连接传输模式),由机器发送和接收分离的信息包,不需要建立正式的连接。
  91. 套接字是类似于文件的对象,使程序能够接受传入连接,进行传出连接,发送和接收数据。在两台机器进行通信之前,它们都必须创建套接字对象。
  92. 使用base64模块通过base64, base32或base16编码将二进制数据编码/解码为文本
    原文作者:bluescorpio
    原文地址: https://www.jianshu.com/p/17986cf2178c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞