📅  最后修改于: 2020-01-18 14:50:44             🧑  作者: Mango
在Python中,要创建迭代器,我们可以同时使用常规函数和生成器。生成器的编写就像普通函数一样,但是我们使用yield()
而不是return()
返回结果,作为实现迭代器的工具,它更强大。由于它可以按需评估元素,因此实施起来更容易,更方便。与遇到返回语句时会完全终止的常规函数不同,生成器使用yield语句,该函数的状态从上一次调用中保存,并且在下次调用生成器函数时可以拾取或恢复该状态。与列表相比,生成器的另一个巨大优势是它占用更少的内存。
除此之外,还有两个功能_next_()
和_iter_()
使生成器功能更紧凑,更可靠。
范例:
# Python代码,展示生成器的yield()和next().
def generator():
t = 1
print '第一个结果 ',t
yield t
t += 1
print '第二个结果 ',t
yield t
t += 1
print '第三个结果 ',t
yield t
call = generator()
next(call)
next(call)
next(call)
输出:
第一个结果 1
第二个结果 2
第三个结果 3
发生成器函数和正常函数之间的区别
_next_()
和_iter_()
都是自动实现的,因此我们可以使用next()
来遍历项目。还有许多其他表达式可以简单地编码,类似于列表推导,但我们使用括号代替括。这些表达式设计用于封闭函数立即使用生成器的情况。生成器表达式允许创建没有yield关键字的生成器。但是,它不共享使用yield函数创建的生成器。范例:
# Python代码,展示生成器
generator = (num ** 2 for num in range(10))
for num in generator:
print(num)
输出:
0
1
4
9
16
25
36
49
64
81
我们还可以使用生成器表达式生成列表:
string = '芒果'
li = list(string[i] for i in range(len(string)-1, -1, -1))
print(li)
输出:
[果','芒']