Python生成器

生成器表达式 generator expression

生成器是迭代器的一种。与解析式的不同是惰性计算、延迟计算

语法:

(返回值 for 元素 in 可迭代对象 if 条件)

使用next()获取生成器的值,每次顺序取一个值,所有值被取完之后再取值就返回None

应用举例

var = ("{:x<4}".format(i) for i in range(10) )
print(var)
print(next(var))

运行结果

<generator object <genexpr> at 0x000001A1C2310F10>
0xxx

因为生成器也是迭代器,所以可以遍历

for x in var:
    print(x)

运行结果

1xxx
2xxx
3xxx
4xxx
5xxx
6xxx
7xxx
8xxx
9xxx

因为生成器只能向前,不能往回走,所以会有如下结果:

var = ("{:x<4}".format(i) for i in range(10) )
print(var)
print(next(var))

for x in var:
    print(x)

print('---------------')

for x in var:
    print(x)

运行结果

<generator object <genexpr> at 0x000001BA6EA30F10>
0xxx
1xxx
2xxx
3xxx
4xxx
5xxx
6xxx
7xxx
8xxx
9xxx
---------------

生成器练习

num=(print('{}'.format(i+1)) for i in range(3))
num1=next(num)
num2=next(num)
sum_num=num1+num2
print(sum_num)

运行结果

1
2
Traceback (most recent call last):
  File "C:/Users/ASUS-PC/PycharmProjects/zhanghao/复习/生成器.py", line 13, in <module>
    sum_num=num1+num2
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

产生上面结果是因为:print函数的返回值是None,所以加不了

原文地址:https://www.cnblogs.com/zh-dream/p/13733330.html