一.闭包
闭包就是内层函数对外层函数(非全局)的变量的引用.
def func1(): name = "liu" def func2(): print(name) func2() func1() 结果:liu
我们可以使用__closure__来检测函数是否是闭包,使用函数名 .__closure__返回cell就是闭包,返回None就不是闭包.
在函数外边调用内部函数:
def outer(): name = "liu" def inner(): print(name) return inner fn = outer() #访问外部函数,获取内部函数的函数地址 fn() #访问内部函数
闭包的作用:
1.保护数据不受侵害
2.让一个变量能够常驻内存
三. 迭代器
print(dir(s)) #打印对象中可以运用的方法和函数
iterable 表示可迭代的
如果对象中有__iter__函数,那么我们认为这个对象遵守了可迭代协议.就可以获取到相应的迭代器.__iter__是帮助我们获得到对象的迭代器.
Iterable:可迭代对象,内部包含__iter__()函数
Iterator:迭代器,内部包含__iter__() 同时包含__next__()
迭代器的特点:
1.节省内存
2.只能向前
3.惰性机制