函数名的使用 和 闭包 和 迭代器

函数名就是一个变量名

函数名可以作为参数传给函数

def my():
    print('我是my')
def proxy(fn):  # 代理模式,装饰器
    print('在处理之前')
    fn()
    print('在处理之后')

proxy(my)   #  在处理之前
            # 我是my
            # 在处理之后
def func():
    print('我是func')
    a =10
    def inner():
        print('我是inner')
    return inner
func()() # 先运行func()  然后在返回值上加()
# 结果为:  我是func 我是inner

闭包:在内层函数中访问外层函数的变量

闭包的作用:

  1.可以保护你的变量不受侵害

  2.可以让一个变量常驻内存

def outer():
    a =10 # 对外界是不开放的,常驻内存,为了inner执行的时候有值
    def inner():
        print(a)
    inner()
outer()

迭代器

dir(str)  # dir 查看xx类型的数据可以执行哪些方法

可迭代对象(Iterable)可以使用__iter__()来获取到迭代器

迭代器(Iterator)里面有__next__()

 

特点

1.只能向前

2.几乎不占用内存,节省内存

3.惰性机制

for  循环内部机制:

  1.首先获取到迭代器

  2.使用whlie循环获取数据

  3.it.__next__()来获取数据

  4.处理异常  try:xxx   except   StopIteration

lst = ['小白','小李','小花','小明','小龙']
it = lst.__iter__()
while True:
    try:
        el = it.__next__()
        print(el)
    except StopIteration:
        break

 判断是否是迭代器

lst = ['小白','小李','小花','小明','小龙']
it = lst.__iter__()
print('__iter__'in dir(it))
print('__next__'in dir(it))
# 可以通过dir来判断数据是否是可迭代的,以及数据是否是迭代器

官方方案

lst = ['小白','小李','小花','小明','小龙']
it = lst.__iter__()
from collections import  Iterable  # 可迭代对象
from collections import  Iterator  # 迭代器
print(isinstance(lst,Iterable))
print(isinstance(lst,Iterator))
print(isinstance(it,Iterable))
print(isinstance(it,Iterator))

 

posted on 2019-05-08 18:00  Little_Raccoon  阅读(154)  评论(0编辑  收藏  举报