python 生成式和生成器
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2017/10/17 21:46
# @Author : lijunjiang
# @File : test.py
"""
列表生成式
一个用来生成列表的特定语法形式的表达式。可以对一组元素进行过滤或得到对列表元素进行处理后得到的结果
可以快速的根据已存在的可迭代对象推导出一个新的list
语法格式:
[exp for val in collection if condition]
执行过程:
先对传入的列表进行for循环得到将符合条件的元素再进行if判断返回给exp
执行exp表达式,最后将处理后的结果以列表的形式返回一个列表
"""
tuple_test = [x*x for x in xrange(10) if x*x%2 == 0]
print(type(tuple_test))
print(tuple_test)
# 执行结果:
# <type 'list'>
# [0, 4, 16, 36, 64]
# 等价于
tuple_test1 = []
for i in xrange(10):
if i*i%2 == 0:
tuple_test1.append(i)
print(type(tuple_test1))
print(tuple_test1)
# # 执行结果:
# <type 'list'>
# [0, 2, 4, 6, 8]
"""
生成器
在Python中,这种一边循环一边计算的机制,称为生成器
生成器是按照某种算法不断生成新的数据,直到满足某一个指定的条件结束
每次只生成一个元素,不必创建完整的list,从而节省大量的空间
构造生成器的两种方式:
1、使用类似列表生成式的方式生成 (2*n + 1 for n in range(3, 11)) 将生成式的[],换为()
2、使用包含yield的函数来生成
如果计算过程比较简单,可以直接把列表生成式改成generator;
但是,如果计算过程比较复杂,就只能通过包含yield的函数来构造generator。
"""
# 使用类似于列表生成式的方式来构造生成器
print('使用类似于列表生成式的方式来构造生成器')
print('generatot = (x*x for x in xrange(10) if x*x%2 == 0)')
generatot = (x*x for x in xrange(10) if x*x%2 == 0)
print(type(generatot))
print(generatot)
for i in generatot:
print(i)
print('使用包含yield的函数构造生成器')
def func1():
for i in xrange(10):
if i*i%2 == 0:
yield i*i
generatot1 = func1()
print(type(generatot1))
print(generatot1)
for i in generatot1:
print(i)
# 执行结果:
# 使用类似于列表生成式的方式来构造生成器
# generatot = (x*x for x in xrange(10) if x*x%2 == 0)
# <type 'generator'>
# <generator object <genexpr> at 0x0000000002BA1480>
# 0
# 4
# 16
# 36
# 64
# 使用包含yield的函数构造生成器
# <type 'generator'>
# <generator object func1 at 0x0000000002C2AF78>
# 0
# 4
# 16
# 36
# 64
"""
生成式和生成器的区别:
生成式直接返回了表达式的结果列表,
生成器返回的是一个对象,该对象包含了对表达式结果的计算引用, 通过循环可以直接输出
生成器不会一次性列出所有的数据,当你用到的时候,在列出来,更加节约内存的使用率。
"""
"""
可迭代对象(Iterable)
即可直接用于for循环的对象统称为可迭代对象(Iterable)。
类型有:list、tuple、dict、set、str、生成器
可以使用isinstance()来判断一个对象是否是Iterable对象
迭代器(Iterator)
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
Python中的Iterator对象表示的是一个数据流,
Iterator可以被next()函数调用被不断返回下一个数据,直到没有数据可以返回时抛出StopIteration异常错误。
可以把这个数据流看做一个有序序列,但我们无法提前知道这个序列的长度。
同时,Iterator的计算是惰性的,只有通过next()函数时才会计算并返回下一个数据
http://www.cnblogs.com/yyds/p/6281453.html
"""
# 实现99乘法表
def func3():
for i in xrange(1, 10):
for j in xrange(1, i+1):
print('{0}*{1}={2}'.format(j, i, i*j)),
print('\n')
func3()
#执行结果:
# 1*1=1
#
# 1*2=2 2*2=4
#
# 1*3=3 2*3=6 3*3=9
#
# 1*4=4 2*4=8 3*4=12 4*4=16
#
# 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
#
# 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
#
# 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
#
# 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
#
# 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
python 生成式和生成器的更多相关文章
- python生成式和生成器
一,生成式和生成器 1,列表生成式 mylist = [ i*i for i in range(3) if i>1 ] print(mylist) 运行结果:[4] 可以发现,快速生成列表的表达 ...
- python 生成式,生成器,迭代器,可迭代
1.生成器就是迭代器2.生成式用[](中括号)包起来,生成器用()(圆括号)包起来3.生成式在使用前已经在内存中存在,生成器只有在使用时才生成4.迭代器是可以用.__next__()不断取出下一值,直 ...
- python学习笔记——列表生成式与生成器
1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行 ...
- Python之列表生成式、生成器、可迭代对象与迭代器
本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法 ...
- 【转】Python之列表生成式、生成器、可迭代对象与迭代器
[转]Python之列表生成式.生成器.可迭代对象与迭代器 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterabl ...
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...
- python的列表生成式和生成器
1.列表生成式是Python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理,语法格式为: [exp for val in collection if co ...
- 【Python】python内置函数、列表生成式、生成器
一.内置函数 1 print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 2 print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 3 pri ...
- python 之 列表生成式、生成器表达式、模块导入
5.16 列表生成式 l=[]for i in range(100): l.append('egg%s' %i)print(l)l=['egg%s' %i for i in range(100 ...
随机推荐
- Redis学习笔记(三)
一.数据备份与恢复 数据备份: localhost:> save OK 该命令会在redis的安装目录中创建文件dump.rdb,并把数据保存在该文件中 查看redis的安装目录: localh ...
- 684. Redundant Connection
https://leetcode.com/problems/redundant-connection/description/ Use map to do Union Find. class Solu ...
- ACM二分搜索中的最大化最小值 总结
这类题目都有个相似的地方就是需要你去找一个临界点. 分析题目要你求什么,例如时间 那么mid就是时间 看求得这个跟什么相关 例如 poj 3258 求得是距离 这个距离跟两者之间的差相关 那题目要求你 ...
- Linux文件类型 扩展名的作用
链接类型文件 查找显示管道文件 普通文件类型 file 查看文件的类型 data文件类型 创建块字和符设备 mknod 1,.tar .tar.gz .tgz .zip tar.bz 表示压缩文件,创 ...
- 其它- in-place
in-place 刷编程题的时候,经常遇到题目要求do in-place.所以就上网搜了相关概念,简单总结一下. in-place操作,意思是所有的操作都是”就地“操作,不允许进行移动,或者称作 ...
- vba通过函数调用Winrar压缩软件压缩文件
Dim site As String Dim FolderName As String Dim FolderName1 As String Dim Rarex ...
- 使用chrome开发程序,自动刷新开发目录
npm i livereload -g 在开发目录下: livereload 安装这个插件:https://chrome.google.com/webstore/detail/livereload/j ...
- “帮你APP”团队冲刺4
1.整个项目预期的任务量 (任务量 = 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) : 所有工作的预期时间:88h 目前已经 ...
- 设计模式之第15章-适配器模式(Java实现)
设计模式之第15章-适配器模式(Java实现) “呔,来着何人,报上名来.”“这是谁啊,我怎么没见过”,“就是啊,我也没印象.”“我当然是适配器了,要不然还能是谁.”适配器模式碎碎念:我不就是昨天把你 ...
- ogre3D学习基础12 --- 让机器人动起来(移动模型动画)
学了那么长时间,才学会跑起来.My Ogre,动起来. 第一,还是要把框架搭起来,这里我们用到双端队列deque,前面已经简单介绍过,头文件如下: #include "ExampleAppl ...