zoukankan      html  css  js  c++  java
  • Python基础12_生成器,列表推导式,生成器表达式

    一. 生成器 genetator
    一种一边循环一边计算的机制
    三种方式获得生成器:
    (1)通过生成器函数
    (2)通过各种推导式来实现生成器
    (3)通过数据的转换也可以获取生成器
    函数中存在yield,这个函数就是生成器函数,再执行这个函数的时候就不再是函数的执行了,而是获得这个生成器,yield是分段执行一个函数,return是直接停止执行函数,当程序运行完最后一个yield,再继续执行__next__()程序会报错
    send()和__next__()一样都可以让程序执行到下一个yield,区别在于:
    send()可以给上一个yield的位置传递值,不能给最后一个yield发送值,在第一次执行生成器代码时不能使用send()
    所有的生成器都是迭代器都可以直接使用for循环, 都可以使用list()函数来获取到生成器内所有的数据
    yield from 可以把一个可迭代对象分别进行yield返回
    二. 列表推导式.生成器表达式以及其他推导式
    列表推导式语法 [结果 for循环 if条件]
    生成器表达式和列表推导式的语法基本上是一致的,只是把[]替换成()
    生成器表达式 (结果 for循环 if条件)
    生成器表达式和列表推导式的区别:
    (1)列表推导式比较耗内存,一次性加载,生成器表达式几乎不占内存,使用的时候才分配和使用内存
    (2)得到的值不一样,列表推导式得到的是一个列表,生成器表达式获取的是一个生成器
    生成器的惰性机制: 生成器只有在访问的时候才取值
    字典推导式 {key: value for循环 if条件}
    集合推导式 (key for循环 if条件) 集合特点:无序,不重复,所以集合推导式自带去重功能
    没有元祖推导式

  • 相关阅读:
    对于Sobel算子的学习
    HDU 2594(求最长公共前后缀 kmp)
    HDU 6108(整除判断 数学)
    HDU 5968(异或计算 暴力)
    HDU 5963(游戏 博弈+规律)
    简单算法考题记录
    flex与bison
    C++ 智能指针
    Linux 添加设备驱动程序
    Linux 添加系统调用
  • 原文地址:https://www.cnblogs.com/guyannanfei/p/10103458.html
Copyright © 2011-2022 走看看