zoukankan      html  css  js  c++  java
  • Python列表生成式和生成器

    【1】列表生成器:列表生成式就是一个用来生成列表的特定语法形式的表达式。

    1.基础语句结构:[exp for iter_var in iterable例如:a=[f(x) for x in range(10)]

    2.工作过程:

    迭代iterable中的每个元素;每次迭代都先把结果赋值给iter_var,然后通过exp得到一个新的计算值;最后把所有通过exp得到的计算值以一个新列表的形式返回。

    相当于这样的过程:L = [] for iter_var in iterable:

    L.append(exp)

    详情介绍:https://www.cnblogs.com/yyds/p/6281453.html

    【3】生成器:

    1.作用:按照某种算法不断生成新的数据,直到满足某一个指定的条件结束。

    构造生成器的两种方式:

    • 使用类似列表生成式的方式生成 (2*n + 1 for n in range(3, 11))
    • 使用包含yield的函数来生成

    生成器的执行过程:

    在执行过程中,遇到yield关键字就会中断执行,下次调用则继续从上次中断的位置继续执行。

    生成器的特性:

    • 只有在调用时才会生成相应的数据
    • 只记录当前的位置
    • 只能next,不能prev

    生成器的调用

    要调用生成器产生新的元素,有两种方式:

    • 调用内置的next()方法
    • 使用循环对生成器对象进行遍历(推荐)
    • 调用生成器对象的send()方法
    # print(list(range(10)))
    # s=(x*2 for x in range(10))
    # print(s)#<generator object <genexpr> at 0x000001EBD2E2CFC0>生成器对象
    # for i in s:
    #
    #   #print(s.__next__())
    #   print(next(s),i)#等价于s.__next__()取下一个元素
    
    # print(next(s))
    # print(next(s))
    #生成器就是一个可迭代对象(Iterable)
    
    
    #生成器一共两种创建方式
    #1(x*2 for x in range(5))
    #2.yieId
    
    def foo():
        print('ok')
        yield 1
        print('ok2')
        yield 2
    g=foo()
    # print(g)
    # for i in foo():
    #     print(i)
    # next(g)
    # next(g)
    
    #什么是可迭代对象(是否有_iter_)
    l=[1,2,3]
    l.__iter__()
    
    
    
    def fid(max):
        n,before,after=0,0,1
        while n<max:
            yield
            before,after=after,before+after
            n=n+1
    
    fid(5)
  • 相关阅读:
    Rails中使用图表(ChartJs)显示数据
    Ubuntu下sublime无法输入中文问题完美解决
    ruby--$:.unshift File.expand_path('..', __FILE__)(转载)
    消息闪现
    Rails中编写自己的任务
    Rails定时任务
    rails中设置配置信息 读取配置信息
    在lib下编写的自己的类需要用到model内相关方法
    rails_ajax 验证验证码
    rails添加验证码
  • 原文地址:https://www.cnblogs.com/lanyinhao/p/9131785.html
Copyright © 2011-2022 走看看