一、昨日内容回顾
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__() 就没有值
只能向前,不能反复。