Python————高级特性

高级特性

1. 生成式与生成器

1)列表生成式

列表生成式就是一个用来生成列表的特定语法形式的表达式。
是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]

2)集合生成式和字典生成式

字典生成式:用来快速生成字典;
集合生成式:用来快速生成集合;
在这里插入图片描述

3)生成器Generator
  • 什么叫生成器?
    在Python中,一边循环一边计算的机制,称为生成器:Generator。
  • 什么时候需要使用生成器?
    一般情况下我们不需要使用生成器,只有当我们因为性能限制才需要用到,比如我们使用python读取一
    个10g的文件,如果一次性将10g的文件加载到内存处理的话(read方法),内存肯定会溢出;这里如果可以
    使用生成器把读写交叉处理进行,比如使用(readline和readlines)就可以再循环读取的同时不断处理, 这样就可以节省大量的内存空间.
  • 如何创建生成器?
    第一种方法: 列表生成式的改写。 []改成()
    第一种方法: yield关键字。
  • 如何打印生成器的每一个元素呢?
    通过for循环, 依次计算并生成每一个元素。
    如果要一个一个打印出来,可以通过next()函数获得生成器的下一个返回值。
  • 生成器的特点是什么?
  1. 节约内存
  2. 迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是
    说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新
    创建的。

2.迭代器

  • 迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。
    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
  • 可迭代对象:可以直接作用于for循环的对象(如何判断是否可以迭代?)
    一类是集合数据类型,如list, tuple,dict, set,str等;
    一类是generator,包括生成器和带yield的generator function。
  • 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
    把list、dict、str等Iterable变成Iterator可以使用iter()函数
迭代器和生成器的区别 ?

在这里插入图片描述

3.闭包

1)什么是闭包?
  • 闭包的概念就是当我们在函数内定义一个函数时,这个内部函数使用了外部函数的临时 变量,且外部函数的返回值是内部函数的引用时,我们称之为闭包。
  • 闭包再理解
    内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。
  • nonlocal关键字
    显式的指定变量不是闭包的局部变量
    闭包的一个常用场景就是装饰器。
2)闭包实例

在这里插入图片描述
函数line与变量a,b构成闭包。在创建闭包的时候,我们通过line_conf的参数a,b说明了这两个变量的取值,
这样,我们就确定了函数的最终形式(y=x+1和y=4x+5)。
优点: 闭包也具有提高代码可复用性的作用。

3.装饰器

1)本质

装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的
前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,
比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。

2)为什么需要装饰器

写代码要遵循 开放封闭 原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

  • 封闭:已实现的功能代码块
  • 开放:对扩展开发
3)装饰器(decorator)功能
  1. 引入日志
  2. 函数执行时间统计
  3. 执行函数前预备处理
  4. 执行函数后清理功能
  5. 权限校验等场景
  6. 缓存
4)通用装饰器

在这里插入图片描述