# 列表生成式:一次性生成所有数据,然后保存在内存中,适合小量数据
# 将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()