JAVA网络爬虫
HttpClient

导航

 

python迭代器与闭包的相关操作

  • 迭代器

    '''
               可迭代对象
    
    以直接作用于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
    
    对象
    
    '''
    
  • 闭包

    #在函数内部在定义一个函数,并且这个函数用到了外边函数的变量
    #那么将这个函数以及用到的一些变量称之为闭包
    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)
    
    # 运行结果
    ----1----
    ----3----
    --------------------------------------------------
    ----2----
    101
    ----2----
    200
    ----2----
    300
    
  • 闭包-应用

    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)
    
    # 运行结果
    1
    4
    1
    
posted on 2019-05-04 19:41  gmlgxx  阅读(57)  评论(0)    收藏  举报