一、闭包
1.写法:在外层函数中声明一个变量,在内存函数使用或者返回这个变量。
这个结构叫闭包。
def fun1(): a=10 def fun2():
print(a) return fun2
这种结构就叫做闭包
2.作用:
1).保护变量
2).使变量常驻内存
__closure__:有东西,就是闭包;None就不是闭包
def outer(): a = 10 # 常驻内存 def inner(): print(a) # 在内部使用的外面的变量 return inner # 返回了内部函数 ret = outer() print(ret.__closure__) # 有东西, 就是闭包. None就不是闭包
打印结果:(<cell at 0x03831310: int object at 0x5073E840>,)
二、迭代器
迭代器:
1.Iterable 可迭代的对象,里面包含了__iter__(),可以使用for循环
包括str,list,tuple,dict,set,open(),range()
2.Iterator:迭代器,里面包含了__iter__()和__next__(),也可以使用for循环
3.dir() 查看某数据类型中可以执行的方法
lst = [1,2,3,4] print(dir(lst))
4.从那么多个方法里面找'__iter__'太难了,用下面这个判断有没有这个方法
lst = [1,2,3,4] it = dir(lst) print('__iter__' in it)
5.总结特点
1)节省内存
2)惰性机制:只有执行__next__()才执行
3)只能向前,不能反复
6.用while实现for循环
lst = [1,2,3,4] it = lst.__iter__() while 1: try: print(it.__next__()) except StopIteration: print('结束了') break for el in lst: print(el) else: print('结束了') lst = [1,2,3] it = dir(lst) print('__next__' in it) print(it)
from collections import Iterable # 可迭代的 from collections import Iterator # 迭代器 lst = ["周润发","麻花藤","刘刘刘"] print(isinstance(lst, Iterable)) # instance 实例, 对象 print(isinstance(lst, Iterator)) # instance 实例, 对象 it = lst.__iter__() print(isinstance(it, Iterable)) # instance 实例, 对象 print(isinstance(it, Iterator)) # instance 实例, 对象