迭代器

一、函数名的应用(第一类对象)
   函数名是一个特殊的变量,与括号配合可以执行函数的变量

函数名的命名规范和变量是一样的.函数名其实就是变量名,
可以作为列表中的元素进行存储.
  1、函数名的内存地址
def func():
    print("呵呵")
print(func)

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

def func():
    print("呵呵")
print(func)
a=func
a=()

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

def func1():
        pass
def func2():
        pass
lst = [func1, func2]
for el in lst:
        el()
   4、函数名可以作为函数的参数传递给参数
def func():
        pass
def proxy(fn):
        fn()
proxy(func)

    5、函数名可以当做函数的返回值

def func():
        def inner():
            pass
        return inner
func()()

二. 闭包
闭包:在内层函数中访问外层函数的局部变量
   用.__closure__来检测函数是否是闭包,返回cell就是闭包,返回Nnoe就不是闭包

好处:
1. 保护你的变量不受外界影响
2. 可以让变量常驻内存
def outer():
    a = 10
    def inner():
       print(a)
return inner
三. 迭代器
使用dir来查看该数据包含了那些方法
用来遍历列表,字符串,元祖....可迭代对象
可迭代对象: Iterable, 里面有__iter__()可以获取迭代器
迭代器Iterator: 里面有__iter__()可以获取迭代器, 还有__next__()

迭代器特点:
1. 只能向前.
2. 惰性机制.
3. 省内存(生成器)
for循环的内部机制.
1. 首先获取到迭代器.
2. 使用while循环获取数据
3. it.__next__()来获取数据
4. 处理异常 try:xxx except StopIteration:

it = xx.__iter__()
while 1:
try:
data = it.__next__()
xxxxxx
except StopIteration:
break
原文地址:https://www.cnblogs.com/shanae/p/9455503.html