1. 代码写作规范: http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
2. 程序执行原理:将python解释器加载到内存中,cpu根据解释器的语法规则翻译程序,然后执行
3. Input()函数返回的均为字符串
4. 浮点数本身就是不准确的,小数太小了后会有误差,用二进制浮点数来表示十进制小数,大部分情况下是会有误差的,十进制小数在转成二进制的时候,多数情况下会变成循环小数,而计算机的精度是有限的,所以就产生了误差
5. Python标识符区分大小写
6. Python中空格和tab键不要混用,建议使用空格
7. True和False在与数字的计算中为1和0,在逻辑判断中非0即真
8. 三大流程:顺序,分支和循环
9. \t制表符 在控制台输出一个制表符,协助在输出文本时,垂直方向保持对齐
10. pyc结尾的文件是官方用cpython解释器编译过的二进制文件(字节码),import导入模块的时候会生成
11. del 关键字本质上是把一个变量从内存中删除
12. 元组只包含一个元素时。需要在元素后面添加逗号,否则就不是元组,而是元素的类型。元组中保存的数据类型通常是不同的。
13. 列表是有序的数据集合,字典是无序的数据集合。通常字典输出的顺序和定义的顺序不一样。
14. 字典中的键只能是字符串、数字和元组。
15. 字符串:虽然可以使用\”或者 \’做字符串的转义,但在实际开发中,如果字符串内部需要使用”,可以使用’定义字符串,反之如此。
16. 字符串切片取逆:str[::-1]
17. 字符串比较符合以下规则:”0”<”A”<”a”,字典不可以直接比较大小。
18. In 和not in 被称为成员运算符。对字典操作时,操作的是字典的键。
19. 在python中,变量与数据时分开存储的,数据保存在内存中,变量中保存数据在内存中的地址,变量中记录数据的地址就叫做引用。使用id()函数可以查看变量中保存数据所在的内存地址。如果变量已定义,当给一个变量赋值的时候,本质上是修改了数据的引用。
20. 在python中函数参数传递的是保存数据的引用,也就是实参的地址。函数返回值也是。
21. 不可变类型,内存中的数据不允许被修改:数字类型int,bool,float,complex,字符串str,元组tuple。可变类型,内存中的数据允许被修改:列表和字典。可变类型的数据变化通过其方法来实现,此时引用不变。如果给一个可变类型赋值一个新的数据,引用会改变。
22. 在函数内部不允许直接修改全局变量的值,而是重新定义了一个新的局部变量。可以通过全局变量的引用对应的数据。要想在函数内部修改全局变量的值,可以在函数内部用global关键字对全局变量进行声明,告诉解释器声明的变量是拳击变量,之后就可以修改全局变量的值了。
23. 代码结构图从上到下:shebang(#! /usr//python) import模块 全局变量 函数定义 执行代码。
24. 对于列表在执行+=时,并不是先+在=赋值,而是执行了extend()方法。
25. 带有默认值的缺省参数要在参数列表的末尾、。在调用函数时,如果有多个缺省参数,需要制定参数名。
26. 多值参数:参数名前增加一个*可以接收元组*args,两个*可以接收字典*kwargs。
27. 拆包:在元组前加*,在字典前加**。
28. 内置函数dir传入标识符/数据,可以查看对象内的所有属性和方法。
29. 类名的命名规则要符合大驼峰命名法。Person
30. 对象内方法的self:是指当前调用此方法对象的引用。同一个类创建的多个对象之间的属性是互不干扰的。
31. Is运算符来判断两个对象的内存地址是否一致,是否是对同一个对象的引用。类似于id(x)== id(y) 对NONE比较时建议使用is判断。
32. Python中并不存在真正的私有属性和方法(伪私有属性和方法),而是对其进行了特殊的处理,将私有属性和方法变成了_类名__方法名或属性名。
33. 在python中,super是一个特殊的类,super()就是使用super类创建出来的对象,最常使用的场景就是在重写父类方法时,调用在父类中封装的方法实现。
34. 在python中,针对类提供了一个内置属性__mro__可以查看方法搜索的顺序,MRO是method resolution order,主要是在多继承判断时判断方法、属性的调用途径。里面存的是各个类的顺序。
35. 多态:不同的子类对象调用相同的父类方法,产生不同的执行结果。前提:以继承和重写父类方法为前提。特性:多态可以增加代码的灵活度。是调用方法的技巧,不会影响到类的内部设计。
36. 属性的获取是向上查找机制:当用实例对象调用属性时,先查找实例对象属性是否存在,不存在则查找类属性。如果使用对象.类属性 = 值 赋值语句,只会给对象添加一个属性,而不会影响到类属性的值。
37. 在既不需要访问实例属性或调用实例方法和也不需要访问类属性或者调用类方法时可以使用静态方法。只访问类属性时使用类方法。其他使用实例方法。在实例方法中可以访问类属性。
38. __new__方法:使用类名()创建对象时,python的解释器首先调用__new__方法为对象分配空间,它是一个由object基类提供的内置的静态方法,由两个作用:(1)在内存中为对象分配空间 (2)返回对象的引用。Python的解释器获得对象的引用后,将引用作为第一个参数传递给__init__方法。
39. 即使是在单例模式下,__init__初始化方法也是执行多次,定义一个类属性init_flag来标记是否执行初始化动作。
40. 异常的传递:当函数/方法执行出现异常,会将异常传递给函数/方法的调用方,如果传递到主程序,仍然没有异常处理,程序会终止。所以在开发中可以在主程序中增加异常捕获。
41. 模块别名应该符合大驼峰命名法。Import导入时,若名字冲突,后面的导入会覆盖前面的导入。
42. 模块导入的搜索顺序;先搜索当前目录指定模块名的文件,如果有就直接导入,如果没有再搜索系统目录。每个模块都有一个内置属性__file__可以查看模块的完整路径。
43. 每一个文件都应该是可以被导入的。一个独立的python文件就是一个模块。在导入文件时,文件中所有没缩进的代码都会被执行一遍。
44. __name__在被导入时是模块名,在当前执行的程序时是__main__。
45. 要在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表。from . import 模块名在当前目录下导入模块。
46. Python中文件区别大小写,read(一次性读完)文件后文件指针移动到文件的末尾。
47. 在python2中默认使用ASCII编码,要使用utf-8,在文件里添加 # *_* coding:utf-8 *_,但在遍历字符串时,仍会以字节为单位遍历字符串,可以在字符串前加上字幕u。告诉解释器这是一个utf-8编码格式的字符串。
48. eval(str)函数将字符串当成有效的表达式求职并返回结果。
49. 导入模块的顺序:官方标准模块导入,第三方模块导入,应用程序模块导入。
50. Scrapy爬虫