Python闭包:闭包叫lexical closure
- 内层函数可使用外层函数的变量
函数中使用yield,会返回一个生成器对象
装饰器:
- 装饰器本身是一个函数,用于装饰其他函数
- 功能:增强被装饰函数的功能
装饰器一般接受一个函数对象作为参数,以对其进行增强
递归:
递归需要边界条件,递归前进段和递归返回段
函数的设计规范:
耦合性:
(1)通过参数接受输入,以及通过return产生输出以保证函数的独立性
(2)尽量减少使用全局变量进行函数间通信
(3)不要在函数中修改可变类型的参数
(4)避免直接改变定义在另外一个模块中的变量
聚合性:
(1)每个函数都应该有一个单一的、统一的目标
(2)每个函数的功能都应该相对简单
Python类与面向对象
类:将同一种具体物事的共同特性抽象出来的表现
- 状态和转换这些状态的操作组成
- 状态就是数据
- 变量:就是类属性
- 操作即为方法
- 函数:操作变量引用的数据的代码
类间关系:
依赖(“user-a”)
一个类的方法操纵另外一个类的对象聚合(“has-a”)
类A的对象包含类B的对象继承(“is-a”)
描述特殊与一般关系
面向对象编程的原则:
- 面向对象的模型机制有3个原则:封装、继承及多态
封装(Encapsulation)
隐藏实现方案细节
将代码及其处理的数据绑定在一起的一种编程机制,用于保证程序和数据不受外部干扰且不会被误用继承(Inheritance)
一个对象获得另一个对象属性的过程,用于实现按层分类的概念
一个深度继承的子类继承了类层次中它的每个祖先的所有属性
超类、基类、父类
子类、派生类多态(Polymorphism)
允许一个接口被多个通用的类动作使用的特性,具体使用哪个动作与应用场合相关
“一个接口,多个方法”
用于为一组相关的动作设计一个通用的接口,以降低程序复杂性
Python类和对象:
- 类是一种数据结构,可用于创建实例
- 一般情况下,类封装了数据和可用于该数据的方法
- Python类是一个可调用对象,即类对象
- Python2.2之后,类是一种自定义类型,而实例则是声明某个自定义类型的变量
- 实例初始化:
通过调用类来创建实例
instance = ClassName(args...)
类在实例化时可以使用__init__和__del__两个特殊的方法
Python中创建类:
class ClassName(bases):
'class docunebtation string'
class_suit
- 超类是一个或多个用于继承的父类的集合
- 类体可以包含:声明语句、类成员定义、数据属性、方法
- 注意:
如果不存在继承关系,ClassName后面的”(bases)”可以不提供
类文档为可选
class语句的一般形式:
class ClassName(bases):
data = value 定义数据属性
def method(self,...): 定义方法属性
self.member = value
Python类方法及调用:
- 实例(对象)通常包含属性
- 可调用的属性:方法
object.method() - 数据属性
- 可调用的属性:方法
- 在OOP中,实例就像是带有“数据”的记录,而类是处理这些记录的”程序“
- 通过实例调用方法相当于调用所属类的方法来处理当前实例
- 类似instance.method(args…)会被自动转换为class.method(instance,args…)
- 因此,类中每个方法必须具有self参数,它隐含当前实例之意
- 在方法内对self属性做赋值运算会产生每个实例自己的属性
- Python规定,没有实例,方法不允许被调用,此即为”绑定“
- 通过实例调用方法相当于调用所属类的方法来处理当前实例
Python类和实例的属性:
- class语句中的赋值语句会创建类属性
- 在类方法中对传给方法的特殊参数self进行赋值会创建实例属性