本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象
想要得到生成器的值必须要用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. LeetCode202:Happy Number 。C#版,在vs2010中通过,leetcode中Wrong Answer

    static List<int> nums = new List<int>(); public static bool IsHappy(int n) { int newint ...

  2. odoo11 添加自定义模块报错问题

    在昨天解决了数据库管理页面布局混乱的问题之后,如何设置自己的custom_addons模块文件夹成了主要问题,建立自己的custom_addons文件夹,可以使用git命令来管理自己所写代码的版本了, ...

  3. bitset常用用法&&简单题分析

    Preface bitset,还是一个比较好用的STL,可以给一些题目做到神奇的常数优化(\(O(\frac{原来的复杂度}{机器的位数(32位or64位)})\)) 关于一些具体的函数等内容可以参考 ...

  4. [数据可视化之一]Pandas单变量画图

    Pandas单变量画图 Bar Chat Line Chart Area Chart Histogram df.plot.bar() df.plot.line() df.plot.area() df. ...

  5. [Deep-Learning-with-Python]GAN图片生成

    GAN 由Goodfellow等人于2014年引入的生成对抗网络(GAN)是用于学习图像潜在空间的VAE的替代方案.它们通过强制生成的图像在统计上几乎与真实图像几乎无法区分,从而能够生成相当逼真的合成 ...

  6. SAAS云平台搭建札记: (二) Linux Ubutu下.Net Core整套运行环境的搭建

    最近做的项目,由于预算有限,公司决定不采购Windows服务器,而采购基于Linux的服务器. 一般的VPS服务器,如果使用Windows系统,那么Windows Server2012\2016安装好 ...

  7. Auto-ML之自动化特征工程

    1. 引言 个人以为,机器学习是朝着更高的易用性.更低的技术门槛.更敏捷的开发成本的方向去发展,且Auto-ML或者Auto-DL的发展无疑是最好的证明.因此花费一些时间学习了解了Auto-ML领域的 ...

  8. Wechat login authorization(OAuth2.0)

    一.前言 昨天小组开了个会,让我今天实现一个微信网页授权的功能,可以让用户在授权之后无需再次登录既可进入用户授权界面.在这之前我也从没接触过微信公众号开发之类的,也不知道公众号后台是啥样子的,自己所在 ...

  9. Nagios监控系统部署(源码)

    1. 概述2. 部署Nagios2.1 创建Nagios用户组2.2 下载Nagios和Nagios-plugin源码2.3 编译安装3. 部署Nagios-plugin3.1 编译安装nagios- ...

  10. centos单机安装nginx、gitlab、nexus、mysql共存

    思路就是不同系统设不同端口号,通过nginx做反向代理绑定不同域名. nginx 安装 1.安装pcre软件包(使nginx支持http rewrite模块)yum install -y pcreyu ...