闭包,迭代器

一.闭包

闭包就是内层函数对外层函数(非全局)的变量的引用.

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.惰性机制

posted @ 2018-08-10 15:05  不喜欢酸甜的刘青阳  阅读(122)  评论(0编辑  收藏  举报