一.昨日内容回顾
1.函数名
函数名是一个变量名
可以作为集合类的元素
可以作为参数进行传递
def func(fn):
fn()
可以作为返回值返回
def outer():
def inner():
xxx
return inner
2.闭包
内层函数对外层函数的变量的访问
def outer():
a = 10
def inner():
print(a)
return inner
ret = outer()
xxxxxx
ret()
作用:
1.保护变量: 局部变量 自己函数中访问
2.让一个变量常驻内存
3.迭代器
特点:
1.省内存
2.惰性机制,不访问__next__() 就没有值
3.只能向前,不能反复
在数据中包含了__iter__() 可迭代对象
如果包含了__next__() 迭代器
"__iter__" in dir (数据)
"__next__" in dir (数据)
from collections import Iterable ,Iterator
Iterable :可迭代的
Iterator: 迭代器
isinstance(对象,类型)
二.今日主要内容
迭代器
__iter__() 获取迭代器
__next__() 下一个
生成器
本质就是迭代器
两种方式写生成器
1.生成器函数
2.生成器表达式
生成器函数
函数内部有yield,yield 返回 -> return
yield可以把函数分段执行
生成器函数被调用的时候,返回生成器
def dunc():
yield
g = func() - 得到生成器
生成器的用法和迭代器基本一致
__next__() 开始执行生成器,执行到yield,直到没有yield,抛出StopIteration
send() 可以给上一个yield传值
1.省内存
2.惰性机制,不访问__next__() 就没有值
3.只能向前,不能反复
各种推导式(简单)
列表推导式[结果 for循环 if判断]
字典推导式{key:value for循环 if判断}
集合推导式 {key for循环 if判断}
生成器表达式(最难)
(结果 for循环 if 判断)
惰性机制, 不访问__next__() 就没有值
只能向前,不能反复