迭代器的一些概念
迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器
迭代器协议和可迭代协议
可以被for循环的都是可迭代的
可迭代的内部都有 __iter__ 方法
只要是迭代器,一定可迭代
可迭代的对象 .iter() 方法就可以得到一个迭代器
迭代器中的 __next__() 方法可以一个一个的获取值
for循环其实就是在使用迭代器
#for循环的流程: it = lst.__iter__() while 1:
try: el = it.__next__() #for循环的循环体 except StopIteration: break
只有 是可迭代对象的时候,才能用for
当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代。
迭代器的好处:
1. 省内存
2. 惰性机制
3. 只能往前. 不能后退
闭包
闭包: 在内层函数中引入外层函数的变量
作用:
1. 保护变量不受侵害(javascript)
2. 让一个变量常驻内存
例子一
def func(): a = 10 # 安全的 def func2(): print(a) def func3(): print(a) def func4(): nonlocal a a = 20