迭代器

一. 函数名的运用.

  函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量.

  1. 函数名的内存地址.

def func():
    print("呵呵")
print(func)
结果:
<function func at 0x1101e4ea0>

  2. 函数名可以赋值给其他变量.

def func():
    print("呵呵")
print(func)
a = func # 把函数当成⼀一个变量量赋值给另⼀一个变量量
a() # 函数调⽤用 func()

  3. 函数名也可以当做容器类的元素.

  4. 函数名可以当做函数的参数.

  5. 函数名可以作为函数的返回值.

二. 闭包

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

  闭包的作用: 1. 保护变量

         2. 常驻内存 

  闭包的基本写法:

def outer():
    a = 10
    def inner():
        return a
    return inner

三. 迭代器.

  1. 可迭代对象.

    字符串, 列表, 元组, 字典, 集合都可以被for循环, 说明他们都是可迭代的.

  2. 可迭代协议.

    Iterable:  可迭代的.里面有__iter__()

    可以被迭代要满足的要求就叫做可迭代协议, 可迭代协议的定义就是内部实现了__iter__方法.

  3. 迭代器.

    Iterator:  迭代器. 里面有__iter__() 还有 __next__()

    将可迭代对象转化成迭代器, (可迭代对象.__iter__()), 内部使用__next__方法, 一个一个的取值, 

    加了异常处理功能, 取值到底后自动停止.

    迭代器的特点:

      1. 节省内存.

      2. 惰性机制. (只有执行__next__()才会取值).

      3. 只能向前, 不能反复.

  4.for循环

    for 循环的内部用的就是迭代器

lst = [1, 2, 3]
it = lst.__iter__().__next__()
while 1:
    try:
        it.__next__()
    except StopIteration:
        break

 

posted on 2018-09-17 20:27  噬心人  阅读(89)  评论(0编辑  收藏  举报