第一类对象,闭包和迭代器

第一类对象-> 函数名 -> 变量名
  函数对象对象可以像变量一样进行赋值
  还可以作为列表的元素进行使用
  可以作为返回值返回
  可以作为参数进行传递

def func1() :
    print("表面兄弟卢本伟")
def func2() :
    print("冰清玉洁赵梦玥")
def func3() :
    print("义薄云天孙亚龙")
def func4() :
    print("和你不熟UU妹")
lis = [func1,func2,func3,func4]
for el in lis :
    el()

  

闭包 -> 函数的嵌套
  内层函数对外层函数中的变量的使用

  好处:
    1. 保护变量不被侵害
    2. 让一个变量常驻内存

def func1() :
    def func2():
        print("别让他过来")
    print("克里斯关下门")
    return func2
a = func1()
a()

  

    如何通过代码查看一个闭包
    __closure__: 有东西就是闭包. 没东西就不是闭包

 

迭代器 -> 固定的思路. for循环
  一个数据类型中包含了__iter__函数表示这个数据是可迭代的
  dir(数据): 返回这个数据可以执行的所有操作

  判断迭代器和可迭代对象的方案(野路子)
  __iter__ 可迭代的
  __iter__ __next__ 迭代器

a="卢本伟牛逼啊"
it = a.__iter__()
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())

  

判断迭代器和可迭代对象的方案(官方)
from collections import Iterable, Iterator
isinstance(对象, Iterable) 是否是可迭代的
isinstance(对象, Iterator) 是否是迭代器

  模拟for循环
    lst= []
    # 拿迭代器
    it = lst.__iter__()
    while 1:
      try:
        it.__next__()
      except StopIteration:
        break

a="卢本伟牛逼啊"

it = a.__iter__()
print(it)
while 1 :
    try :
        print(it.__next__())
    except StopIteration :
        break

for el in a :
    print(el)

  迭代器=>

  特征:
  1. 省内存(生成器)
  2. 惰性机制
  3. 只能向前. 不能后退

  作用:统一了各种数据类型的遍历

posted on 2018-12-10 20:02  哎呀!土豆  阅读(103)  评论(0编辑  收藏  举报

导航