迭代器
一. 函数名的运用.
函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量.
1. 函数名的内存地址.
def func(): print("呵呵") print(func) 结果: <function func at 0x1101e4ea0>
2. 函数名可以赋值给其他变量.
def func(): print("呵呵") print(func) a = func # 把函数当成⼀一个变量量赋值给另⼀一个变量量 a() # 函数调⽤用 func()
3. 函数名也可以当做容器类的元素.
4. 函数名可以当做函数的参数.
5. 函数名可以作为函数的返回值.
二. 闭包
闭包就是内层函数, 对外层函数(非全局)的变量的引用.
闭包的作用: 1. 保护变量
2. 常驻内存
闭包的基本写法:
def outer(): a = 10 def inner(): return a return inner
三. 迭代器.
1. 可迭代对象.
字符串, 列表, 元组, 字典, 集合都可以被for循环, 说明他们都是可迭代的.
2. 可迭代协议.
Iterable: 可迭代的.里面有__iter__()
可以被迭代要满足的要求就叫做可迭代协议, 可迭代协议的定义就是内部实现了__iter__方法.
3. 迭代器.
Iterator: 迭代器. 里面有__iter__() 还有 __next__()
将可迭代对象转化成迭代器, (可迭代对象.__iter__()), 内部使用__next__方法, 一个一个的取值,
加了异常处理功能, 取值到底后自动停止.
迭代器的特点:
1. 节省内存.
2. 惰性机制. (只有执行__next__()才会取值).
3. 只能向前, 不能反复.
4.for循环
for 循环的内部用的就是迭代器
lst = [1, 2, 3] it = lst.__iter__().__next__() while 1: try: it.__next__() except StopIteration: break