生成器 python0 1 8 27 64_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)
# 执行结果:
#
# [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 生成式和生成器相关推荐
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
python的高级特性:切片,迭代,列表生成式,生成器,迭代器 1 #演示切片 2 k="abcdefghijklmnopqrstuvwxyz" 3 #取前5个元素 4 k[0:5 ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- python(六)切片,生成式,生成器,迭代
2019独角兽企业重金招聘Python工程师标准>>> 有了前面的基础,其实掌握的比较扎实的话还是能够做出一些简单的东西的,至少解决一些个基本的数学题还是问题不大,比如说实现一个斐波 ...
- Python3匿名函数字典排序、生成式与生成器、装饰器简介
1. 参数匿名函数字典排序 函数的参数: 参数类型: 我们经常在看别人的代码中,经常出现def(*args,**kwargs)这样的表现形式; *args tuple(1,) **kwargs dic ...
- day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器
一.函数即变量 1.赋值效果图 a = 1 b = a def func(): print('hello') func 是函数名,相当于变量名,print('hello')是函数体,相当于变量的值, ...
- 列表生成式、生成器迭代器
列表生成式.生成器&迭代器 一.列表生成式(List Comprehensions) 1.案例--列表每个值加1 先有列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把 ...
- Python学习笔记 生成式和生成器
目录 生成式 - 列表生成式 - 字典生成式 - 集合生成式 - 生成式的嵌套 生成器 - 生成器和生成式的差异 - 写一个生成器函数 - next 和 send 函数 生成式 Python的这个叫做 ...
- python生成器和装饰器_python三大法器:生成器、装饰器、迭代器
迭代器 迭代的概念 使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表获取值的过程 使用for循环遍历取值的对象叫做可迭代对象, 比如:列表.元组.字典.集合.range.字符串 判断 ...
- python生成器单线程_【Python】迭代器、生成器、yield单线程异步并发实现详解
转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从 ...
最新文章
- 一份详细的“入坑Phd指南”---教你如何做笔记、整理参考书目、管理时间、如何写作、对自己和导师合理预期...
- Play 2.0 用户指南 - 模版引擎 -- 针对Scala开发者
- GitHub访问越来越慢了,怎么办?
- linux线程同步(5)-屏障
- PHP的单引号双引号
- Celery 框架学习笔记(分布式框架)
- Maven系列一pom.xml 配置详解
- 7pin数码屏的使用
- python画爱心树_Python在情人节画棵爱心树/爱情树
- LeetCode 每日一题 781. 森林中的兔子
- Dense biased networks with deep priori anatomy and hard region adaptation: Semi-supervised learning
- win10忘记密码,重装系统
- python3中将'\xb2\xbb\xca\xc7\xc4\xda\xb2\xbf\xbb\xf2\xcd\xe2\xb2\xbf\xc3\xfc\xc1\xee'转成中文
- [深入浅出C语言]理解取整、取余和取模
- jieba 同义词_中文分词库FNLP与jieba的安装与使用
- java libgdx,java - 运行新的LibGDX项目时“找不到文件”
- html5字体加重,javascript – Html5画布字体重量渲染比它应该重得多
- 用多协议换采集器制作家用负氧离子除醛设备(带空气检测传感器)
- 宝藏又小众的网页设计UI素材网站分享
- 玩转Windows服务系列——Windows服务小技巧
热门文章
- [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入hive
- .net2.0 C# Json反序列化
- NX(UGS)技术关于我和你顶着忽移不定的云彩
- 这款插件不既有Chrome版【飞秋下载】
- 【飞秋】网络的基础-域名篇
- 用VC写Assembly代码(1)
- 对USB驱动程序的理解(1)
- 苦苦发愁学习Python?七天掌握Python就在此时
- 小白 C++ 入门到大神发疯学习路线
- 前端开发必备:js中的sort()排序函数