本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象
想要得到生成器的值必须要用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. ASP.NET MVC学习笔记(二)笔记

    接下来我们一起了解ASP.NET MVC的最重要的核心技术,了解ASP.NET MVC的开发框架,生命周期,技术细节. 一.Routing与ASP.NET MVC生命周期 1.Routing——网址路 ...

  2. python3 编程使用技巧

    from random import randint data = {"Student{}".format(i):randint(60,100) for i in range(1, ...

  3. 请允许我转载一篇关于套接字的博客:Socket

    这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblog ...

  4. [Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子

    [Spark][Python][DataFrame][SQL]Spark对DataFrame直接执行SQL处理的例子 $cat people.json {"name":" ...

  5. STM32 M3内核的位带操作原理及步骤

    STM32 M3内核的位带操作原理及步骤 一.位带操作有什么用?什么是位带操作 位带操作的作用:可以实现对某一GPIO口寄存器(或SRAM内存中)的某一bit位直接写0或1,达到控制GPIO口输出(或 ...

  6. [JSOI2016]无界单词[动态规划、kmp]

    题意 题目链接 分析 对于第一问,枚举最终串最小的相同前后缀来统计答案. 由于最小的相同前后缀也是无界单词,所以可以考虑先求解子问题. 定义状态 \(f(i)\) 表示长度为 \(i\) 的串中有多少 ...

  7. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十二)Spring集成Redis缓存

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 整合Redis 本来以为类似的Redis教程和整合代码应该会很多,因 ...

  8. 001_IntelliJ IDEA详细安装步骤

    安装IntelliJ IDEA 一.安装JDK 1 下载最新的jdk,这里下的是jdk-8u66 2 将jdk安装到默认的路径C:\Program Files\Java目录下 二.安装IntelliJ ...

  9. jiedui

    源代码:https://github.com/hanzhaoyan/jieduizuoye/tree/master 功能要求: 该程序用图形界面实现下面功能:用计算机产生一个100以内的随机数,游戏者 ...

  10. SE Springer小组之《Spring音乐播放器》需求分析说明书二

    2.1 目标 Spring音乐播放器软件为课程<软件工程>所开发的课程作业,主要意图是为访问计算机中的mp3格式的音频文件,并使其能够完成访问,读取,添加,保存,播放,切换音频文件等功能. ...