python学习笔记——继承

迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历成为迭代。

在python中,迭代是通过for...in来完成的。

使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行。

生成器

在python中,一边循环一边计算的机制,称为生成器:generator

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

generator和函数的执行流程不一样,函数时顺序执行,遇到return语句或者最后一行函数语句就会返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

迭代器

凡是可以作用于for循环的对象都是Iterable类型
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列
集合数据类型时Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象

reduce()

函数会对参数序列中元素进行累积。

函数将一个数据集合中的所有数据进行下列操作:用传给reduce()中的函数function(有两个参数),先对集合中的第1,2个元素进行操作,得到的结果再与第三个数据用function函数运算,最后得到一个结果。

filter()

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

装饰器

在代码运行期间动态增加功能的方式

本质上,装饰器是一个返回函数的高阶函数。

当程序使用"@函数"装饰另一函数时,实际完成如下两步:

1.将被装饰的函数作为参数传给@符号引用的函数

2.将函数B替换成第一步的返回值

偏函数

需要import functools
functools.partial的作用:把一个函数的某些参数给固定住,返回一个新的函数,调用这个新函数会更简单。

模块

自己创建的模块名不可以与python自带的模块名冲突,否则将无法导入系统模块

模块的命名规则

python以目录组织模块,,称为包(package),一个abc.py的文件就是一个叫abc的模块,如果这个名称与其他模块冲突,则可选择一个顶层包名,即创建上层目录。

每个包目录下必须有一个__init.py__文件,没有这个文件python会把它当成空目录

作用域

正常命名的函数和变量名是public类,_ 开头的是私有类(private)

init 方法的第一个参数只能是self,表示创建的实例本身

继承

继承可以把父类的所有功能都直接拿过来,再累只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写

动态语言的类型特点决定了继承不像静态语言那样是必须的。

types

判断一个对象是否是函数:
import types
type(fn) == types.FunctionType

isinstance

isinstance([变量],[对象])

__slots__变量

限制实例的属性

class Student(object):
	__slots"__ = ("name","age")

s = Student()
s.name = 'PRI1S0N'
s.age = 20

使用__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

原文地址:https://www.cnblogs.com/pr1s0n/p/12246001.html