zoukankan      html  css  js  c++  java
  • 三元运算 ,列表推导式,迭代器,生成器

    1.三元运算 

    a,b,c =1,2,3                                         a,b,c =0,2,3 

    d=c if a else b                                      d=c if a else b

    >>>d                                                    >>>d

    3                                                          2

    ##if a:
    ## d=c
    ##else:
    ## d=b

    a,b = 1,2
    a,b = b,a 
    # 相当于
    a,b = (1,2)
    a,b = b,a     # (2,1)

    2.#列表推导式 iterator,迭代器

    1】列表推导式

    l0=[i for i in range(1,3)]                            >>>l0 = [1,2]

    l1={ for i in range(1,3)}                              >>>l1 = {1,2}  #集合推导式
    l2={i:'gg' for i in range(1,3)}                      >>>l2 = {1:'gg',2:'gg'}

    n=iter(l1)                                            #__iter__()            

    next(n)                  >>>1                    #n.__next__()

    next(n)                  >>>2

    # 元素全部取出后,next会报错
    # 只能按照顺序取   可以使用for 循环全部取出

    # next(n) 等效于 n.__next__()

    2】:迭代器
    '迭代器协议就是实现对象的 __iter__() 和__next__()方法。

    #for 循环到底发生了什么
    for i in l1:                     #l1--> i=iter(l1)-->i=next(i)
      print(i)

     3】:生成器          生成器都是迭代器的对象

    迭代器的元素是确定的,生成器不是确定的

    • li = [i for i in range(1,11)]   n=iter(li)    n是迭代器   他的值是固定的(1,11)
    •  例子2里面                  g是生成器    一边生成值,还要一边运行算法

    #如何去创建生成器generator? 改为括号    

    1.li = (i for i in range(1,11))   生成器                         [i for i in range(1,11)]   列表推导式

    2.使用yield

    def fib(cishu):                                       fib() 是一个函数,

      n,a,b=0,0,1

      while n<cishu:

        yield b     yield 返回的是生成器 ,而 g 接收的是返回值,所以  g= fib(cishu),  g 是生成器  

        a,b = ,b a+b

        n+=1

     g= fib(3)          >>>  next(g)           >>>  next(g)           >>>  next(g)      #运行到yield会停止。所以next(g)一次取出一个值

                 1                   1                  2

     

    #yield 返回生成器 ,运行到yield会停止

    # 生成器保存的是算法,一边生成,一边运行

  • 相关阅读:
    Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介
    Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度
    Quartz.NET 2.0 学习笔记(2) :和1.0的几点不同
    C#实现网页正文提取算法ok
    网页正文提取的思路
    sql getdate() 时间格式设置
    分页,静态程序asp实现,php同理
    网页正文抽取能用的抽取代码java
    泛采集技术
    查询一个数据表中的数据并插入到另一个数据表
  • 原文地址:https://www.cnblogs.com/tangpg/p/7993253.html
Copyright © 2011-2022 走看看