列表生成式
列表生成式就是一个用来生成列表的特定语法形式的表达式。
是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。
普通的语法格式:[exp for iter_var in iterable]
带过滤功能语法格式: [exp for iter_var in iterable if_exp]
循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
字典生成式:用来快速生成字典;
集合生成式:用来快速生成集合;
生成器
什么叫生成器?
在Python中,一边循环一边计算的机制,称为生成器:Generator。
什么时候需要使用生成器?
一般情况下我们不需要使用生成器,只有当我们因为性能限制才需要用到,比如我们使用python读取一
个10g的文件,如果一次性将10g的文件加载到内存处理的话(read方法),内存肯定会溢出;这里如果可以
使用生成器把读写交叉处理进行,比如使用(readline和readlines)就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间.
如何创建生成器
如何创建生成器?
第一种方法: 列表生成式的改写。 []改成()
第一种方法: yield关键字。
如何打印生成器的每一个元素呢?
通过for循环, 依次计算并生成每一个元素。
如果要一个一个打印出来,可以通过next()函数获得生成器的下一个返回值。
生成器特点
生成器的特点是什么?
节约内存
迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是
说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新
创建的。
迭代器
迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
可迭代对象:可以直接作用于for循环的对象(如何判断是否可以迭代?)
一类是集合数据类型,如list, tuple,dict, set,str等;
一类是generator,包括生成器和带yield的generator function。
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数
迭代器和生成器的区别
闭包
函数引用?
什么是闭包?
闭包的概念就是当我们在函数内定义一个函数时,这个内部函数使用了外部函数的临时变量,且外部函数的返回值是内部函数的引用时,我们称之为闭包。
闭包再理解? 内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。
nonlocal关键字? 显式的指定变量不是闭包的局部变量
闭包的一个常用场景就是装饰器。
举例
函数line与变量a,b构成闭包。在创建闭包的时候,我们通过line_conf的参数a,b说明了这两个变量的取值,
这样,我们就确定了函数的最终形式(y=x+1和y=4x+5)。
优点: 闭包也具有提高代码可复用性的作用。
装饰器
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的
前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,
比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。
为什么需要装饰器?
写代码要遵循 开放封闭 原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:
封闭:已实现的功能代码块
开放:对扩展开发
装饰器功能
引入日志
函数执行时间统计
执行函数前预备处理
执行函数后清理功能
权限校验等场景
缓存
标签:闭包,函数,迭代,python,生成式,生成器,高级,特性,iter