您的位置:首页 > 编程语言 > Python开发

week03_python生成器

2018-08-22 22:38 537 查看
生成器表达式Generator expression
语法:
(返回值 for 元素 in 可迭代对象 if 条件)

列表解析式的中括号换成小括号就行了

返回一个生成器

和列表解析式的区别:
生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值

列表解析式是立即返回值

生成器:
可迭代对象

迭代器

举例说明:
g = ("{:04}".format(i) for i in range(1, 11))
print(type(g))# <class 'generator'>

print(next(g))

for x in g:
print(x)

print("#"*50)

for x in g:
print(x)

总结: 可以延迟计算;返回迭代器,可以迭代;从前到后走完一遍后,不能回头;
练习题:
it = ("{}".format(i+1) for i in range(2))
first = next(it)
second = next(it)
print(first)
print(second)
val = int(first) + int(second) #想一下这里不用int()函数会怎么样?
print(val)
和列表解析式的对比:
计算方式:

生成器表达式延迟计算,列表解析式立即计算;

内存占用:

单从返回值本身来说,生成器表达式省内存,列表解析式返回新的列表;

生成器没有数据,内存占用极少,但是使用的时候,虽然一个个返回数据,但是合起来占用的内存也差不多;

列表解析式构造新的列表需要占用内存;

计算速度:

单看计算时间看,生成器表达式耗时非常短,列表解析式耗时长;

但是生成器本身并没有返回任何值,只是返回了一个生成器对象;
列表解析式构造并返回了一个新的列表;

集合解析式:

语法:
{返回值 for 元素 in 可迭代对象 if 条件}

列表解析式的中括号换成花括号{}就行了

立即返回一个集合

用法:
{(x, x + 1) for x in range(10)}
字典解析式:
语法:
{返回值 for 元素 in 可迭代对象 if 条件}

列表解析式的中括号换成花括号{}就行了

使用key:value形式

立即返回一个字典

用法:
print({x: (x, x+1) for x in range(10)})
print({x: [x, x+1] for x in range(10)})
print({(x): [x, x+1] for x in range(10)})
# print({[x]: [x, x+1] for x in range(10)})#####???????????
print({chr(0x41+x): x**2 for x in range(10)})
print({str(x): y for x in range(3) for y in range(4)})
print({str(x): y for x in range(3) for y in range(4)})
#会输出多少个元素???
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  generator 生成器