Python生成式和生成器

# 列表生成式:一次性生成所有数据,然后保存在内存中,适合小量数据
# 将1-100所有偶数的平方返回,下边两种方法效果一致,方法1便是生成式
# 方法1
li = [x*x for x in xrange(1,101) if x%2 == 0]
print(li)
# 方法2
def funA():
    a = []
    for i in xrange(1,101):
        if i%2 == 0:
            a.append(i*i)
    return a
print(funA())

# 列表生成器:返回一个可迭代对象,即generator对象,必须通过遍历才能一一将值取出
# 1.最简单的办法,把原来生成式的[]换成()即可
lt2 = (y*y for y in xrange(1,101) if y%2 ==0)
print(lt2)
print(type(lt2))

# 2.函数中定义列表生成器(generator)
# yield 的作用就是把一个函数变成一个generator,带有 yield 的函数
# 不再是一个普通函数,python解释器会将其视为一个generator
def funB(n):
    sum = 0
    ii = 0
    while(ii < n):
        sum = sum + ii
        ii += 1
        yield(sum)
print(funB(10))
for iii in funB(10):
    print iii

# 生成器不会一次列出所有的数据,更加节省内存使用率

# 可迭代对象(iterable):可以通过for循环调用出来的,就是可迭代对象,如:列表、元组、字典、生成式、
# 迭代器(iterator):任何具有__next__()方法的对象都是迭代器,对迭代器调用next()方法可以获取下一个值
# 小练习:打印九九乘法表
def funC():
    for i in xrange(1,10):
        for j in xrange(1,i+1):
            print('%s * %s = %s' %(j,i,i*j)),
        print
funC()
运行结果:
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值