zoukankan      html  css  js  c++  java
  • python--006--三元运算、列表解析、生成器表达式

    1. 生成器

    定义:可以理解为一种数据类型。这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象。

    生成器分类及在python中的表现形式:(python有两种不同的方式提供生成器)


    1)生成器函数:常规函数定义,但是使用yield而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行。

    def test():
        yield1
        yield2
        yield3
    
    g=test()
    print(g)
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    output:
    <generator object test at 0x0000000001DFB8C8>
    1
    2
    3

    2)生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表。

    2. 三元表达式

    name='ryder'
    #name='john'
    res='Sha' if name=='ryder' else 'shuai'
    print(res)
    
    output:
    Sha

    3.列表解析

    egg_list=[]
    for i in range(10):
        egg_list.append('鸡蛋%s'%i)
    print(egg_list)
    
    l=['鸡蛋%s' %i for i in range(10)]
    l1=['鸡蛋%s'%i for i in range(10) if i>5]
    #l1=['鸡蛋%s'%i for i in range(10) if i>5 else i]#没有四元表达式
    print(l)
    print(l1)
    
    output:
    ['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']
    ['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']
    ['鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']

    4. 生成器表达式
    将上述列表解析处的[]换为()后,就变成了生成器表达式

    l = ('鸡蛋%s' % i for i in range(10))
    print(l)
    print(l.__next__())
    print(next(l))
    
    # output:
    # <generator object <genexpr> at 0x0000000001DEB8C8>
    # 鸡蛋0
    # 鸡蛋1

    总结:
    1)把列表解析的[]换成()得到的就是生成器表达式
    2)列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
    3)python不但使用迭代器协议让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。例如,sum函数是python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和:

      su = sum(x ** 2 for x in range(4))

  • 相关阅读:
    英雄联盟离线更新方法
    (七) Keras 绘制网络结构和cpu,gpu切换
    剑指offer | 链表中的倒数第K个结点 | 12
    剑指offer | 从尾到头打印链表 | 11
    剑指offer | 栈的压入,弹出序列 | 10
    剑指offer | 包含min函数的栈 | 09
    剑指offer | 调整数组顺序使奇数位于偶数前面 | 08
    剑指offer | 旋转数组的最小数字 | 07
    剑指offer | 两个栈实现一个队列 | 06
    剑指offer | 替换空格 | 05
  • 原文地址:https://www.cnblogs.com/jinf/p/11771993.html
Copyright © 2011-2022 走看看