#!/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)

# 执行结果:

#

# [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)

# # 执行结果:

#

# [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)

#

# at 0x0000000002BA1480>

# 0

# 4

# 16

# 36

# 64

# 使用包含yield的函数构造生成器

#

#

# 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

生成器 python0 1 8 27 64_python 生成式和生成器相关推荐

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

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

  2. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  3. python(六)切片,生成式,生成器,迭代

    2019独角兽企业重金招聘Python工程师标准>>> 有了前面的基础,其实掌握的比较扎实的话还是能够做出一些简单的东西的,至少解决一些个基本的数学题还是问题不大,比如说实现一个斐波 ...

  4. Python3匿名函数字典排序、生成式与生成器、装饰器简介

    1. 参数匿名函数字典排序 函数的参数: 参数类型: 我们经常在看别人的代码中,经常出现def(*args,**kwargs)这样的表现形式; *args tuple(1,) **kwargs dic ...

  5. day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器

    一.函数即变量 1.赋值效果图 a = 1  b = a def func(): print('hello') func 是函数名,相当于变量名,print('hello')是函数体,相当于变量的值, ...

  6. 列表生成式、生成器迭代器

    列表生成式.生成器&迭代器 一.列表生成式(List Comprehensions) 1.案例--列表每个值加1 先有列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把 ...

  7. Python学习笔记 生成式和生成器

    目录 生成式 - 列表生成式 - 字典生成式 - 集合生成式 - 生成式的嵌套 生成器 - 生成器和生成式的差异 - 写一个生成器函数 - next 和 send 函数 生成式 Python的这个叫做 ...

  8. python生成器和装饰器_python三大法器:生成器、装饰器、迭代器

    迭代器 迭代的概念 使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表获取值的过程 使用for循环遍历取值的对象叫做可迭代对象, 比如:列表.元组.字典.集合.range.字符串 判断 ...

  9. python生成器单线程_【Python】迭代器、生成器、yield单线程异步并发实现详解

    转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从 ...

最新文章

  1. 一份详细的“入坑Phd指南”---教你如何做笔记、整理参考书目、管理时间、如何写作、对自己和导师合理预期...
  2. Play 2.0 用户指南 - 模版引擎 -- 针对Scala开发者
  3. GitHub访问越来越慢了,怎么办?
  4. linux线程同步(5)-屏障
  5. PHP的单引号双引号
  6. Celery 框架学习笔记(分布式框架)
  7. Maven系列一pom.xml 配置详解
  8. 7pin数码屏的使用
  9. python画爱心树_Python在情人节画棵爱心树/爱情树
  10. LeetCode 每日一题 781. 森林中的兔子
  11. Dense biased networks with deep priori anatomy and hard region adaptation: Semi-supervised learning
  12. win10忘记密码,重装系统
  13. python3中将'\xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee'转成中文
  14. [深入浅出C语言]理解取整、取余和取模
  15. jieba 同义词_中文分词库FNLP与jieba的安装与使用
  16. java libgdx,java - 运行新的LibGDX项目时“找不到文件”
  17. html5字体加重,javascript – Html5画布字体重量渲染比它应该重得多
  18. 用多协议换采集器制作家用负氧离子除醛设备(带空气检测传感器)
  19. 宝藏又小众的网页设计UI素材网站分享
  20. 玩转Windows服务系列——Windows服务小技巧

热门文章

  1. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入hive
  2. .net2.0 C# Json反序列化
  3. NX(UGS)技术关于我和你顶着忽移不定的云彩
  4. 这款插件不既有Chrome版【飞秋下载】
  5. 【飞秋】网络的基础-域名篇
  6. 用VC写Assembly代码(1)
  7. 对USB驱动程序的理解(1)
  8. 苦苦发愁学习Python?七天掌握Python就在此时
  9. 小白 C++ 入门到大神发疯学习路线
  10. 前端开发必备:js中的sort()排序函数