生成器 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值