博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 生成式和生成器
阅读量:7157 次
发布时间:2019-06-29

本文共 2585 字,大约阅读时间需要 8 分钟。

#!/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*igeneratot1 = 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()函数调用并不断返回下一个值的对象称为迭代器:IteratorPython中的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

转载于:https://www.cnblogs.com/lijunjiang2015/p/7782759.html

你可能感兴趣的文章
3n+1
查看>>
K8s中Pod健康检查源代码分析
查看>>
ansible命令(二)
查看>>
联想电脑串口硬盘做GHOST备份
查看>>
手机QQ轻聊版,3.2.0升级3.3.1区别
查看>>
OpenvSwitch概念和原理
查看>>
UE设置,不生成.bak文件
查看>>
Zabbix监控redis 状态
查看>>
Webdriver-PageObject模式之PageFactory 测试组 Tomi
查看>>
Objective-C中实现“多继承”
查看>>
Mysql--error:no query specified
查看>>
文件下载【PHP】
查看>>
iostat命令介绍及C++对其返回值的提取处理
查看>>
手机剩余内存计算方法
查看>>
IOS 利用core text对文字进行排版
查看>>
mysql 表查询
查看>>
org.hibernate.LazyInitializationException
查看>>
java开发的微信分享到朋友圈功能
查看>>
linux命令之cd命令详解
查看>>
一些报错解决办法
查看>>