python迭代器、闭包

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
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只因为你温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值