day11函数名,闭包,迭代器

函数名本质上就是函数的内存地址。闭包

1,。能够被引用函数

2. 能够被当作容器类的元素spa

3.能够当作函数的参数和返回值对象

第一类对象(first-class object)指 1.可在运行期建立 2.可用做函数参数或返回值 3.可存入变量的实体

闭包函数:
#输出的__closure__有cell元素 :是闭包函数
def func():
    name = 'eva'
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f = func()
f()

#输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f2 = func2()
f2()

迭代器:

假如咱们本身写了一个数据类型,但愿这个数据类型里的东西也能够使用for被一个一个的取出来,那咱们就必须知足for的要求。这个要求就叫作“协议”。内存

能够被迭代要知足的要求就叫作可迭代协议。可迭代协议的定义很是简单,就是内部实现了__iter__方法。it

可迭代的:内部必须含有一个__iter__方法。io

迭代器遵循迭代器协议:必须拥有__iter__方法和__next__方法。for循环

for循环,能遍历一个可迭代对象,他的内部到底进行了什么?class

  • 将可迭代对象转化成迭代器。(可迭代对象.__iter__())
  • 内部使用__next__方法,一个一个取值。
  • 加了异常处理功能,取值到底后自动中止。
l = [1,2,3,4]
l_iter = l.__iter__()
while True:
    try:
        item = l_iter.__next__()
        print(item)
    except StopIteration:
        breakltem=iter(l)
相关文章
相关标签/搜索