python迭代器、闭包

  1. 迭代器
  2.   '''
                可迭代对象
     
     以直接作用于for循环的数据类型有以下几种:
     
     一类是集合数据类型,如 list tuple dict set str等
     
     一类是generator,包括生成器和带yield的generator
     function
     
     这些都可以直接作用于for循环的对象统称为可迭代对象: lterable
     
     
                 判断是否可以迭代
     
     可以使用isinstance()判断一个对象是否是Iterable对象:
     
     from collections import Iterable
     
     isinstance([],Iterable)
         是True就是可迭代对象
         是False不是可迭代对象
     
     
                 迭代器
     
     可以被next()函数调用并不断反回下一个值的对象称为迭代器:Iterator.
     
     可以使用isinsrance()判断一个对象是否是Iterator对象:
     
     from collections import Iterator
     
     isinstance((x for x in range(10)),Iterator)
         是True就是迭代器可以用next()
         是False不是迭代器不可以用next()
     
     
                 iter()函数
     
     生成器都是Iterator对象,但list dict str 虽然是Iterable,却不是Iterator
     
     把list dict str 等Iterable变成Iterator可以使用iter()函数:
     
     isinstance(iter([]),Iterator)
         是True就是迭代器可以用next()
         是False不是迭代器不可以用next()
     
     
                 总结
     
     凡是可作用于for循环的对象都是Iterable类型
     
     凡是可作用于next()函数的对象都是Iterator类型
     
     集合数据类型如list dict str 等是Iterable但不是
     
     Iterator,不过可以用iter()函数获得一个Iterator
     
     对象
     
     '''
    
  3. 闭包
  4.  #在函数内部在定义一个函数,并且这个函数用到了外边函数的变量
     #那么将这个函数以及用到的一些变量称之为闭包
     def test1(number1):
         print("----1----")
         def test2(number2):
             print("----2----")
             print(number1+number2)
         print("----3----")
         return test2
     
     result = test1(100)
     print("-"*50)
     result(1) #因为result保存了test1里的变量所以test1这个函数还没有结束所以number1还有效
     result(100)
     result(200)
    
  5. 闭包-应用
  6.  def test1(a,b):
         def test2(x):
             print(a*x+b)
     
         return test2
     
     line1 = test1(1,1) #这是开辟了一个空间
     line1(0)
     
     line2 = test1(10,4)#这又是开辟了一个空间
     line2(0)
                    
     line1(0)  # 因为空间没有被释放
     
     #def createNum(a,b,x):
     #    print(a*x+b)
     #
     #a = 1
     #b = 1
     #x = 0
     #createNum(a,b,x)
    

猜你喜欢

转载自blog.csdn.net/zsx1314lovezyf/article/details/89816898