迭代
如果给定一个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__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的