zoukankan      html  css  js  c++  java
  • 函数二

    函数二

    迭代器

    • 通用的迭代取值方案,惰性计算,能节省内存,不能反复,只能向下执行
    dic = {'q':1,'w':2,'e':3}
    dic_iterator = dic.__iter__()
    res1 = dic_iterator.__next__()
    print(res1)
    res2 = dic_iterator.__next__()
    print(res2)
    res3 = dic_iterator.__next__()
    print(res3)
    dic_iterator.__next__()  # 报错   StopIteration  取完
    while True:
        try:
            res = dic_iterator.__next__()
            print(res)
        except StopIteration
        	break
    
    • 可迭代对象 内置有_iter__方法的类型称为可迭代对象/类型

      • str,list, tuple, dict, set ,文件对象(同时也是迭代器对象)
      a = 'abc'
      print(dir(a))  # dir查看对象的方法和函数
      # 在打印结果中寻找__iter__ 如果存在就表示当前的这个类型是个可迭代对象
      
    • 迭代器对象 内置有__iter____next__方法

    • 迭代器对象一定是可迭代对象,反之不一定

    生成器

    • 自定生成器:凡是函数内出现了yield关键字,调用函数将不会执行函数体代码,会得到一个返回值,该返回值就是我们自定义的迭代器,称之为生成器
    def fun():
        print('hello')
        yield 1
        print('你好')
    	yield 2
        print('666')
        yield 3
    g = fun()
    print(g)  # <generator object func at 0x000001FC98A9F8C8>表示得到的时内存地址
    res=next(g)
    print(res)  # hello  1
    res=next(g)
    print(res)  # 你好  2
    
    def func():
        lst = ['1','2','3','4']
        yield from lst  # 可以直接把可迭代对象中的每一个数据作为生成器的结果进行返回
    g = func()
    for i in g:
        print(i)
    
    yield VS return
    相同点:都可以用来返回值
    不同点:
    return  只能返回一次值,函数就立即结束了
    yield  能返回多次值,yield可以挂起函数
    
    • 推导式
    info = [i for i in range(5) if i % 2 = 0 ]  # [2,4]
    info = {'qi':i for i in range(6)}
    info = {i for i in range(6)}
    
    • 生成器推导式
    gen = (i for i in range(6) if i > 3)  # 
    #推导式有, 列表推导式, 字典推导式, 集合推导式, 没有元组推导式
    #生成器表达式: (结果 for 变量量 in 可迭代对象 if 条件筛选)
    #生成器表达式可以直接获取到⽣成器对象. ⽣成器对象可以直接进行for循环. ⽣成器具有惰性机制.
    #集合推导式和字典推导式很是类似,记住一个小技巧能够快速区分那个是字典那个是集合
    #字典推导式前面的结果是有个冒号,而集合的前面结果就是单纯的结果
    
  • 相关阅读:
    springcloud配置eureka后启动application失败原因Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'trace
    Parameter index out of range (1 > number of parameters, which is 0
    mysql返回某月份的第一天
    mybatisplus的自定义sql使用方法及VO的使用
    mysql截取地址为城市名
    mybatisplus多表查询及自定义查询
    mybatisplus条件构造器wrapper
    HTTP 【值得你看个究竟】
    Kafka 【入门一篇文章就够了】
    notepad++ 删除末尾换行符
  • 原文地址:https://www.cnblogs.com/feiguoguobokeyuan/p/13361713.html
Copyright © 2011-2022 走看看