#!/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 生成式和生成器的更多相关文章

  1. python生成式和生成器

    一,生成式和生成器 1,列表生成式 mylist = [ i*i for i in range(3) if i>1 ] print(mylist) 运行结果:[4] 可以发现,快速生成列表的表达 ...

  2. python 生成式,生成器,迭代器,可迭代

    1.生成器就是迭代器2.生成式用[](中括号)包起来,生成器用()(圆括号)包起来3.生成式在使用前已经在内存中存在,生成器只有在使用时才生成4.迭代器是可以用.__next__()不断取出下一值,直 ...

  3. python学习笔记——列表生成式与生成器

    1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行 ...

  4. Python之列表生成式、生成器、可迭代对象与迭代器

    本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterable.Iterator与Generator之间的关系 一.语法 ...

  5. 【转】Python之列表生成式、生成器、可迭代对象与迭代器

    [转]Python之列表生成式.生成器.可迭代对象与迭代器 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterabl ...

  6. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  7. python的列表生成式和生成器

    1.列表生成式是Python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理,语法格式为: [exp for val in collection if co ...

  8. 【Python】python内置函数、列表生成式、生成器

    一.内置函数 1 print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 2 print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 3 pri ...

  9. 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 ...

随机推荐

  1. Redis学习笔记(三)

    一.数据备份与恢复 数据备份: localhost:> save OK 该命令会在redis的安装目录中创建文件dump.rdb,并把数据保存在该文件中 查看redis的安装目录: localh ...

  2. 684. Redundant Connection

    https://leetcode.com/problems/redundant-connection/description/ Use map to do Union Find. class Solu ...

  3. ACM二分搜索中的最大化最小值 总结

    这类题目都有个相似的地方就是需要你去找一个临界点. 分析题目要你求什么,例如时间 那么mid就是时间 看求得这个跟什么相关 例如 poj 3258 求得是距离 这个距离跟两者之间的差相关 那题目要求你 ...

  4. Linux文件类型 扩展名的作用

    链接类型文件 查找显示管道文件 普通文件类型 file 查看文件的类型 data文件类型 创建块字和符设备 mknod 1,.tar .tar.gz .tgz .zip tar.bz 表示压缩文件,创 ...

  5. 其它- in-place

    in-place 刷编程题的时候,经常遇到题目要求do in-place.所以就上网搜了相关概念,简单总结一下.   in-place操作,意思是所有的操作都是”就地“操作,不允许进行移动,或者称作  ...

  6. vba通过函数调用Winrar压缩软件压缩文件

    Dim site As String        Dim FolderName As String        Dim FolderName1 As String        Dim Rarex ...

  7. 使用chrome开发程序,自动刷新开发目录

    npm i livereload -g 在开发目录下: livereload 安装这个插件:https://chrome.google.com/webstore/detail/livereload/j ...

  8. “帮你APP”团队冲刺4

    1.整个项目预期的任务量 (任务量 = 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) : 所有工作的预期时间:88h 目前已经 ...

  9. 设计模式之第15章-适配器模式(Java实现)

    设计模式之第15章-适配器模式(Java实现) “呔,来着何人,报上名来.”“这是谁啊,我怎么没见过”,“就是啊,我也没印象.”“我当然是适配器了,要不然还能是谁.”适配器模式碎碎念:我不就是昨天把你 ...

  10. ogre3D学习基础12 --- 让机器人动起来(移动模型动画)

    学了那么长时间,才学会跑起来.My Ogre,动起来. 第一,还是要把框架搭起来,这里我们用到双端队列deque,前面已经简单介绍过,头文件如下: #include "ExampleAppl ...