day13 生成器 三元运算 列表解析
本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象
想要得到生成器的值必须要用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 生成器 三元运算 列表解析的更多相关文章
- python迭代器 生成器 三元运算 列表解析
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- Day 21 三元表达式、生成器函数、列表解析
知识点程序: #! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "DaChao" # Date: 2017 ...
- python的迭代器、生成器、三元运算、列表解析、生成器表达式
一 迭代的概念 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前 ...
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- day4 内置函数 迭代器&生成器 yield总结 三元运算 闭包
内置函数: 内置函数 # abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. b = -100 print(b) print(abs(b)) # all() 所有为真才为真,只要有一 ...
- Python 迭代器之列表解析与生成器
 [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...
- Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器
一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...
- Python列表解析与生成器表达式
Python列表解析 l = ["egg%s" %i for i in range(100) if i > 50] print(l) l= [1,2,3,4] s = 'he ...
- python列表解析和生成器表达式
列表解析作为动态创建列表的强大工具,值得学习. 列表解析技术之前的状况--函数式编程. lambda.filter(), map() enumerate, sorted, any, all, zip ...
随机推荐
- Python不能用于大型项目?人们对Python的十大误解
Python 类型系统的特点是拥有强大.灵活的类型操作. 维基百科上对此作出的阐述. 而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系 ...
- Linux安装maven以及配置-Centos7版本
1.Linux安裝maven 1.如果電腦沒有wget命令的,先使用yum安裝wget命令.eg: yum install wget 2.安裝好后就可以直接使用wget命令去下載maven. 附:打开 ...
- java算法----排序----(3)冒泡排序
package log; public class Test4 { /** * java算法---冒泡排序 * * @param args */ public static void main(Str ...
- Luogu2164 SHOI2007 交通网络 期望、BFS、拓扑排序
传送门 题目还算不难吧 首先我们枚举点$i$,将其他所有点到这个点的最短路求出来 然后我们在这一次建出的最短路$DAG$的反图上进行拓扑排序.假设我们算到了点$j$,点$j$的人流量为$t_j$,点$ ...
- Vue-Vue组件的注册和使用
全局注册: 要注册一个全局组件,可以使用 Vue.component(tagName, options). 注意确保在初始化根实例之前注册组件: html代码: <div id="ex ...
- Effective C++学习笔记之#define
前言 条款02:尽量以const.enum.inline替换#define:尽可能用编译器代替不必要的预处理器. 内容 一.对于单纯常量 1.const 有两种特殊的const,常量指针和class专 ...
- Spring Zuul 性能调优,如何提升平均响应时间200% ?
最近负责公司的 Gateway 项目,我们用 Spring Zuul 来做 HTTP 转发,但是发现请求多的时候,AWS 的健康检查就失败了,但是实际上程序还在跑,在日志上也没有任何东西错误打印出来出 ...
- 并行管理工具——pdsh
1. pdsh安装2. pdsh常规使用2.1 pdsh2.2 pdcp 并行管理的方式有很多种: 命令行 一般是for循环 脚本 一般是expect+ssh等自编辑脚本 工具 pssh,pdsh,m ...
- better-scroll的参数和方法
格式:let obj = new BScroll(object,{[option1,],.,.}); 注意,如果在某一个组件内创建了一个BScroll的实例,在组件生命周期结束前要注意调用destro ...
- Python练习之用户登录-5
格式化输出 %s %d %% 编码: ascii 只能显示英文,特殊字符,数字. 万国码:unicode 最开始16位,中文不够32位 4个字节. 占用资源多. 升级:utf-8 utf-16 utf ...