- 说明:博客若有涉及到侵权或者其他不当行为请联系我删除致歉,若有兴趣交流指点或者相互学习也可以发送邮件联系,不胜感激。
- 邮件地址:qiao_jinming@foxmail.com
变量的引用
- 变量与数据分开存储,变量存储数据在内存中的地址,叫做引用
- id(变量) # 查看变量的地址
- pass占位符
- 数字类型,字符串,元组属于不可变类型,即内存中数据不会修改;列表,字典属于可变类型,方法赋值地址不变,但是直接赋值地址也会改变
- 字典的键与hash()不能使用可变类型
局部变量与全局变量
- 局部变量在函数内部使用,全局变量在函数外部定义的变量
- 局部变量的生命周期在函数执行过程中,执行过后被系统回收
- 函数首先查找局部变量,然后查找全局变量
- 函数内部不能直接修改全局变量,函数内部执行修改的全局变量值,函数外部仍然使用全局变量
- global关键字可以在函数内部修改全局变量
- python属于解释型语言,所以变量一定要先使用后调用,所以全局表要放在前端
- 全局变量名字前加g_或者gl_用以区分
函数返回值
- 利用元组返回多个值return (值,值),小括号可以省略
- 一次定义多个变量接收变量,变量,变量 = 函数()
- a,b = b,a # 交换变量,python专属,等号右边是一个元组,省略了小括号
- 在函数内部修改可变参数,会改变函数外部的实参参数,类似于指针
- 列表变量使用 += 相当于方法extend()方法
- def 函数名 (参数_1,参数_2 = 缺省值): # 设置缺省值
- 缺省值参数要放到所有参数的最后
- 若有多个缺省值参数,要在传递实参时声明形参参数
- 多值参数,在形参前加*表示元组,在形参前加**表示字典,实参传递字典为"键=值"格式
- 拆包,为了将元组或者字典传递给多值参数,在元组变量前加*,在字典变量前加**完成拆包
- 递归:函数内部自己调用自己,要指定递归的出口,即当参数满足某个条件时或者无可执行代码时,则返回
- 递归在不确定的循环条件下使用
面向对象OOP,封装
- 面向过程:怎么做的过程,没有固定的套路,开发难度大
- 面向对象:谁来做,更大的封装,多种方法集合成为一个对象
- 类,特征(属性),行为(方法),类是抽象的,不能直接使用,对象是类的具体化,类是模板,对象具体化模板
- 设计三要素:类名,属性(特征描述),方法(行为);类名满足大驼峰命名法
- dir内置函数,dir(函数名):
- __new__ : 创建对象时会被自动调用
- __init__ : 对象被初始化时会被自动调用
- __del__ : 对象被从内存中销毁时会被自动调用
- __str__ : 返回对象的描述信息,使用print输出使用
- __doc__ : 返回文档说明
- 类封装的方法,第一个参数一定是self
- 对象变量 = 类名() # 创建对象
- 在类外部给对象设置属性,通过.进行设置
- 初始化方法为对象设置初始值,__init__定义包含哪些属性
- None表示一个空对象,没有方法和属性
- 一个对象的属性可以是另外一个类的对象
- 判断None应该使用关键字is,is比较地址,==比较内容:is/is not
- 私有属性,私有方法,只希望在对象内部使用,而不希望外部使用,在属性方法名前加__
- python为伪私有,并不是真正意义上的私有,_类名__名称,可以访问私有属性
继承,实现代码的重用
- 相同的代码不需要重写
- 语法,class 类名(父类名):,继承
- 子类(派生类),父类(基类)
- 继承具有传递性,子类继承所有父类的属性和方法,包括父类的父类
- 继承的传递性不会继承叔叔类的方法和属性
- 子类可以继承父类的方法,并且进行重写override
- 对父类方法进行扩展,父类与子类方法不同,子类重写父类方法,super().父类方法,可以重新调用父类方法
- 父类名.父类方法(self)也可以调用父类方法
- 父类的私有属性和私有方法,子类不可以访问
- 子类可以通过父类的共有方法间接的访问父类的私有属性和私有方法
- 子类可以拥有多个父类的属性和方法,class 子类(父类1,父类2):
- 如果父类产生方法同名情况,应尽量避免使用多继承,子类会优先使用第一顺序继承的父类方法
- print(子类名.mro) # 可以查看方法调用对象的顺序,先是子类,然后父类1等等
- 新式类中object是所有类的基类,经典类中则不支持,dir()函数可以查看对象的属性和方法