生成器表达式是一个对象,它执行的计算和列表包含相同,但会迭代地生成结果。语法也和列表包含相同,但要用圆括号代替方括号。

(expression for item1 in iterable1 if condition1for item2 in iterable2 if condition2...for itemN in iterableN if conditionN)

和列表推导不同,生成器表达式实际上不创建列表或者立即圆括号内的表达式求值。相反,它会创建一个通过迭代并按照需要生成值的生成器对象, 例如:

列表推导和生成器表达式之间的差异十分重要,但很微妙。

使用列表推导时,python实际上创建了包含结果数据的列表。而使用生成器表达式时,python创建的是只知道如何按照需要生成数据的生成器。在某些应用中,这可能极大地影响性能和内存使用。

  • 列表推导 --> 使用[ ], 创建包含结果的列表
  • 生成器表达式 --> 使用( ), 创建一个生成器
# 读取一个文件
f = open("data.txt")                    # 打开文件
lines = (t.strip() for t in f)          # 读取行,并删除前后空白
comments = (t for t in lines if t[0] == '#')    # 所有注释
for c in comments:print(c)

这个例子中,生成器表达式提取各行并删除其中的空白,但它实际上没有将整个文件读取到内存中。提取注释的表达式也是如此。相反,在程序开始在for循环中进行迭代时,读取了文件的各行。

在这个迭代过程中,按照需要生成了文件的各行并对其进行过滤。事实上,该过程中绝对没有把整个文件加载到内存中。因此,这是一种从很大的python源文件中提取注释的高效方法。

和列表推导不同,生成器表达式不会创建序列形式的对象。不能对它进行索引,也不能进行任何常规的列表操作,例如append()。但是,使用内置的list()函数可以将生成器表达式转换为列表, 例如:

clist = list(comments)

python基础-生成器表达式相关推荐

  1. Python基础-----三元表达式、列表解析、生成器表达式

    三元表达式: 变量 = 值1 if 条件为真 else 值2 类似于: res = '对了' if 1 > 2 else '错了' print(res) >>> '错了' 普通 ...

  2. python基础内容表达式_01-python基础之python介绍、三元表达式

    本节参考博客 备注:本系列博客除特别标注,默认的环境为python3 学习方法 1. 上课 上课听课的时候只认真听讲,跟着老师走,不要做笔记,如果有重要的知识点,在练习时间再做对应的练习,把重要的知识 ...

  3. python生成表达式_说说 Python 的生成器表达式

    列表推导与生成器表达式都可以用于初始化元组.数组或其他类型的序列.但列表推导需要先建立一个完整的列表,然后再把这 个列表传递到某个构造函数.而生成器表达式会逐个产出元素,这样显然能够节省内存. 列表推 ...

  4. Python之生成器表达式

    生成器表达式Generator expression 语法     (返回值 for元素 in可迭代对象 if条件)     返回一个生成器 和列表解析式的区别     生成器表达式是按需计算(称惰性 ...

  5. Python基础 lambda表达式

    # -*- coding: utf-8 -*-fun1 = lambda x,y : x + y print('fun1(2,3)=' , fun1(2,3)) # fun1(2,3)= 5fun2 ...

  6. python迭代器创建序列_第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用...

    本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...

  7. Python基础——re表达式中re.sub()的用法

    文章目录 介绍 语法 参数介绍 repl为函数时的用法 示例 介绍 Python 的 re 模块提供了re.sub用于替换字符串中的匹配项. 语法 re.sub(pattern, repl, stri ...

  8. Python基础-生成器与yield

    生成器与yield 函数使用yield关键字可以定义生成器对象. 生成器是一个函数,它生成一个值的序列,以便在迭代中使用,例如: def countdown(n):print("counti ...

  9. 第一章 Python基础 ——一起搬砖打地基

    目录 前言 第一章 Python基础 1.表达式 2.整型.浮点型和字符串数据类型 3.字符串的连接和复制 字符串的连接--"+"操作符 字符串的复制--" * &quo ...

最新文章

  1. ccf压缩编码java_压缩编码(CCF)——动态规划
  2. 深度丨有生之年,人工智能会给世界带来什么变化?
  3. GridFS读文件代码示例
  4. 系统相机裁剪比例_真皮、皮革自动裁剪机,拒绝材料浪费,一年可以节省十几万!...
  5. CVPR19 基于图卷积网络的多标签图像识别模型 论文笔记
  6. SpringBoot2.x整合Redis 分布式集群_02
  7. 广州站长沙龙 MIP 问题及答案
  8. 二进制编译安装mysql_二进制编译安装mysql
  9. 比尔·盖茨的11条人生箴言
  10. 宝塔linux配置php环境扩展,CentOS7下宝塔面板php安装mssql扩展
  11. 父游标、子游标及共享游标
  12. java编程软件安装
  13. matlab实现macd策略,经典MACD交易策略
  14. 【图片】图片处理,图片压缩相关知识分享
  15. springboot bootcdn使用
  16. 【云驻共创】华为云数据库之大数据入门与应用(全)
  17. java身份证号/手机号隐藏中间几位
  18. Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用
  19. 视频流媒体服务器ONVIF探测和云台控制是如何设置的?
  20. php android 微信支付,Android_Android实现微信支付功能,开发Android APP微信支付功能, - phpStudy...

热门文章

  1. HAWQ-V2:基于Hessian迹的混合比特量化策略
  2. NTLM与kerberos认证体系详解
  3. 面向对象基础(三)接口
  4. 什么是闭包及闭包的使用
  5. 短信平台应用的十六种方式
  6. c语言中赋值的时候顿号的作用,C语言运算符及其优先级汇总表口诀
  7. MyBatis查询结果resultType返回值类型
  8. Mac安装lrzsz
  9. php 闭包 作用,php的闭包是干嘛的
  10. ThinkBook 13x 酷睿版 评测