python之路-day12-迭代器闭包

一、昨日内容回顾

  1、函数名

  a、函数名是一个变量名

  b、可以作为集合类的元素

  c、可以作为参数进行传递

  def func(fun):

    fn()

  d、可以作为返回值返回

  def outer():

    def inner():

      xxx

    return

  2、闭包

  内层函数对外层函数的变量的访问

    def outer():

      a = 10

      def inner():

        print(a)

      return inner

    ret = outer() 

    xxxxx

    ret()

   作用:

      1、保护变量:局部变量。自己函数中访问

      2、让一个变量常驻内存  

  3、迭代器

  a、特点:

    1、省内存

    2、惰性机制,不访问__next__() 就没有值。

    3、只能向前。不能反复

  b、在数据中包含了__iter__()  可迭代对象

  c、如果包含了__next__()  迭代器

  d、"__iter__" in dir(数据)

  e、"__next__" in dir(数据)

  from collecttions import Iterable, Iterator

  Iterable: 可迭代的

  Interator: 迭代器

  isinstance(对象,类型)

二、今日主要内容

  1、迭代器

    __iter__()  获取迭代器

    __next__()  下一个

  

  2、生成器

    a、本质就是迭代器

    b、两种方式写生成器

      1、生成器函数

      2、生成器表达式

  3、生成器函数

    a、函数内部有yield.  yield 也是返回 与 return类似(切记函数中不要return和yield一起使用,很low)

    b、yield 可以把函数分段执行

    c、生成器函数被调用的时候,返回生成器

      def func():

        yield

      g = func()  -  得到生成器

    d、生成器的用法和迭代器基本一致

    e、__next__()  开始执行生成器。  执行到yield。直到没有yield。抛出StopIteration

    f、send() 可以给上一个yield传值

    g、生成器的特点:

      1、省内存

      2、惰性机制,不访问__next__() 就没有值

      3、只能向前。不能反复

  4、各种推导式(简单)

    列表推导式 [结果  for循环  if语句]

    字典推导式 {key: value  for循环  if判断 }

    集合推导式 {key  for循环  if判断}

  5、生成器表达式  (结果  for循环  if判断)

    惰性机制,不访问__next__() 就没有值

    只能向前,不能反复。

原文地址:https://www.cnblogs.com/alvin-jie/p/9890863.html