本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象
想要得到生成器的值必须要用for或者next,list等来获取 生成器
生成器就是一个可迭代对象
本质上就是一种数据类型
表现形式有两种
生成器函数: 使用yield 代替 return,但是可以返回多次值
调用之后函数内的代码不执行,返回生成器
每从生成器中取一个值就执行一段,遇到yield就停止
如何从生成器取值:
for: 如果没有break就可一直取到最后
next:每次取一个,首次使用时激活生成器
send:不能用在第一个,取下个值会给上个位置传一个新的值
数据类型强制转换: 会一次把所有的数据读到内存中
生成器表达式
(条件成立的放在生成器的值 for i in 可迭代的 if 条件)
  优点
生成器延迟计算,一次返回一个值,大数据量处理很好用
保存状态
提高代码可读性 基本的生成器函数
 def test():
yield 1
yield 2
yield 3
g = test()
print(g) # <generator object test at 0x00000000027F4E58>
print(g.__next__()) #
print(next(g)) # 2
生成器的一次性
 def test():
for i in range(4):
yield i
t = test()
t1 = (i for i in t)
print(list(t1)) # [0, 1, 2, 3] 生成器是第一次性的。
print(list(t1)) # [] 生成器是第一次性的。再次使用就无法获取了
迷惑操作
 def test():
for i in range(4):
yield i
t = test()
t1 = (i for i in t)
t2 = (i for i in t1) # 生成器在产生的时候,并不会有任何的操作
# 生成器是按需取值,因此一开始建立并没有使用,是无值的
print(list(t1)) # [0, 1, 2, 3] 生成器被遍历使用了,才会被消耗掉
print(list(t2)) # []
生成器表达式
 laomuji = ("鸡蛋%s" % i for i in range(10)) # 生成器表达式
print(laomuji) # <generator object <genexpr> at 0x0000000002814E58>
print(laomuji.__next__()) # 鸡蛋0
print(next(laomuji)) # 鸡蛋1

列表解析
数据量比较大的时候不要用,很笨重   原有的正常操作,比较多代码而且很啰嗦
 egg_list = []
for i in range(10):
egg_list.append("鸡蛋%s" %i)
print(egg_list)
  使用列表解析后
 l = ["鸡蛋%s" %i for i in range(5) ]
l1 = ["鸡蛋%s" %i for i in range(5) if i>2 ]
# l2 = ["鸡蛋%s" %i for i in range(10) if i>5 else i] # 不存在4元表达式
print(l) # ['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4']
print(l1) # ['鸡蛋3', '鸡蛋4']
# print(l2) # SyntaxError: invalid syntax

day13 生成器 三元运算 列表解析的更多相关文章

  1. python迭代器 生成器 三元运算 列表解析

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  2. Day 21 三元表达式、生成器函数、列表解析

    知识点程序: #! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "DaChao" # Date: 2017 ...

  3. python的迭代器、生成器、三元运算、列表解析、生成器表达式

    一 迭代的概念 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前 ...

  4. Python开发——函数【迭代器、生成器、三元表达式、列表解析】

    递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...

  5. day4 内置函数 迭代器&生成器 yield总结 三元运算 闭包

    内置函数: 内置函数 # abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. b = -100 print(b) print(abs(b)) # all() 所有为真才为真,只要有一 ...

  6. Python 迭代器之列表解析与生成器

     [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...

  7. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...

  8. Python列表解析与生成器表达式

    Python列表解析 l = ["egg%s" %i for i in range(100) if i > 50] print(l) l= [1,2,3,4] s = 'he ...

  9. python列表解析和生成器表达式

    列表解析作为动态创建列表的强大工具,值得学习. 列表解析技术之前的状况--函数式编程. lambda.filter(), map() enumerate, sorted, any, all, zip ...

随机推荐

  1. 微信小程序日常开发中常遇到的错误代码

    在开发过程中,会遇到很多微信返回的状态码,鬼知道代表什么意思,现在好了,整理总结了一份状态码,方便大家. 微信小程序错误码参考 状态码(场景值) 说明  -1 系统繁忙  0 请求成功  40001 ...

  2. [Oracle][DataGuard]Standby数据库文件有损坏时的处理方法

    需要参考: [Oracle]Recovering the primary database's datafile using the physical standby, and vice versa ...

  3. [Spark][Hive]外部文件导入到Hive的例子

    外部文件导入到Hive的例子: [training@localhost ~]$ cd ~[training@localhost ~]$ pwd/home/training[training@local ...

  4. 第一章:模型层model layer -- Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 题外话: Django的教程写到这里,就进入 ...

  5. js中的栈、堆、队列、内存空间

    栈(stack) .堆(heap). 队列(queue)是js的三种数据结构. 栈(stack) 栈的特点是"LIFO,即后进先出(Last in, first out)".数据存 ...

  6. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [二] 基本使用

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 使用环境 Visual Studio 2017 .NET ...

  7. JSON.NET VS BinaryFormatter 性能

    近期有个性能调优工作.通过dottrace 分析,发现几处问题,其中json.net 在序列化和反序列化的时候也比较耗性能,所以考虑能不能通过其它序列化方式来提高性能. 1 object 序列化代码 ...

  8. linux下rsync和tar增量备份梳理

    前面总结过一篇全量备份/增量备份/差异备份说明,下面介绍下linux下rsync和tar两种增量备份的操作记录: 1)rsync备份 rsync由于本身的特性,在第一次rsync备份后,以后每次都只是 ...

  9. S2X环境搭建与示例运行

    S2X环境搭建与示例运行 http://dbis.informatik.uni-freiburg.de/forschung/projekte/DiPoS/S2X.html 环境 Maven proje ...

  10. 同步手绘板——将View的内容映射成Bitmap转图片导出

    在Android中自有获取view中的cache内容,然后将内容转换成bitmap,方法名是:getDrawingCache(),返回结果为Bitmap,但是刚开始使用的时候,得到的结果都是null, ...