迭代器
迭代是访问容器元素的一种方式
可迭代对象
- Iterable,凡是可作用于 for 循环的对象都是 Iterable 类型
- 如何判断是否是可迭代对象
from collections.abs import Iterable
s = 对象
print(isinstance(s,Iterable)) #判断s是不是可迭代对象
- 常见的一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;一类是 generator ,包括生成
器和带 yield 的 generator function
迭代器
- Iterator,能够被全局函数next()调用,并且返回下一个值的对象,就是迭代器
- 如何判断是否是可迭代对象
from collections.abs import Iterator
s = 对象
print(isinstance(s,Iterator)) #判断s是不是可迭代对象
- 可迭代对象不一定是迭代器,但是迭代器都是可迭代对象
- 生成器就是一种特殊的迭代器
- iter()函数
集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过iter() 函数获得一个 Iterator 对象。目的是在使用迭代器的时候,减少内存的占用。
In [1]: iter([1,2])
Out[1]: <list_iterator object at 0x000001C382399DD8>
In [2]: isinstance(iter([]), Iterator)
Out[2]: True
In [3]: isinstance(iter('abc'), Iterator)
Out[3]: True
函数—闭包(closure)
闭包是一种现象,是弱数据类型编程语言中所特有的现象
- 定义:能够在函数内部调用其他函数变量的现象就叫做闭包
函数包裹函数的现象,就叫做闭包
def outer():
'''
这个函数就是一个闭包
'''
print("这个是一个闭包")
a = 10
def inner():
print("这个是里面函数的代码")
b = 20
print(a + b)
return inner
res = outer()
print(res)
# 调用inner函数
res()
- 作用:让外层函数常驻内存,有可能垃圾无法回收,可以让局部变量全局化