《流畅的python》 笔记

1.不成熟的抽象个过早的优化都会坏事 

2.熟悉doctest是什么,阅读官方文档  https://docs.python.org/3/library/doctest.html) 

3.列表生成式的for嵌套,注意顺序,先写外层然后写内层

# 打印列表中所有字母
[letter for word in ["spades", "diamonds", "clubs", "hearts"] for letter in word] 

4.实例属性和类属性,当我通过类名访问类属性并修改它的时候,它在所有这个类的实例中都会变化

,而我通过实例名访问到类属性并修改时类属性时,其实并没有修改,而是在我实例的这个作用域下新建了一个同名变量. 

5.dunder写法的函数是用来给python解释器调用的而我们自己代码中,不要调用这种方法,也就是说没有my_object.__len__()这种写法,应使用len(my_object)

6.python中没有 && || 运算符,取而代之的是 and or

7.当运算符的左侧为python内建类型时,右侧为自定义类型进行算术运算时会出现TypeError错误,因为无法修改内建类型的代码,此时需要使用反向运算符的重载

8.python字节码 使用 dis模块

9.sys.argv是一个列表,用来获取文件的路径和在命令行中执行文件的参数,sys.argv[0]表示代码本身文件路径,后面的则是运行时的参数

 10.__name__方法返回的是某个变量最终所引用的变量或函数名

11.(p44)大小端模式,低地址存放低位是小端模式(同,大端是异)

12.(p118)在python中,"一等对象"指的是满足下述条件的程序实体:

(1)在运行时创建

(2)能赋值给变量或数据结构中的元素

(3)能作为参数传给函数

(4)能作为函数的返回结果

函数也是一等对象

13.dict.items()返回一个列表其中每个元素都是二元元组由dict的键值对组成(key,word)

14.(p48)原子操作:原子操作(atomic operation)是不需要synchronized",这是多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch(上下文切换,有时也称做进程切换或任务切换,是指CPU 从一个进程或线程切换到另一个进程或线程)

15.列表本身是有地址的,而列表中存放的是元素的地址,想象一下列表中套列表,改变了内层列表中的元素,但是这样并不会改变内层列表本身的地址.

16.函数形参中的*args ,这里的*代表装包,会将你调用这个函数时的没有显式指定名字的实参打包成一个元组传进函数,在函数中再使用*args的时候,表示解包

如果你的实参直接是一个元组的话,会认为你这是一个参数,传到函数中时还要在打包一遍,这时候就是元组中有一个元组类型的变量了,所以实参是元组的时候要先考虑是不是要先解包再传入

17.不可变类型才能被散列(hash),前提是不可变类型的容器中不能包含可变类型).把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。

 18.enumerate传入一个可迭代对象,默认返回从0开始编好号的迭代器

19.对字典迭代,得到的是键

20.哈希表(散列表):给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

21.dis.dis反汇编函数,将一句代码以汇编形式打印出来

22.字面量语法与构造方法: 比如说我要创建一个集合a,字面量语法是a={1,2,3},而构造方法是a=set([1,2,3])

构造方法是调用函数创建集合.

23.chr是python关键字,chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。

24.集合的对称差集A△B={x|x∈A∪B,x∉A∩B}

25.(p75)使用dict,set查找元素的时间复杂度都是O(1),而列表是O(n),这是由于散列表的原因

猜你喜欢

转载自www.cnblogs.com/xuefyre/p/9646798.html