📜  迭代器与生成器的区别

📅  最后修改于: 2021-09-12 10:39:17             🧑  作者: Mango

通过应用相同的逻辑重复多次的过程称为迭代。在像Python这样的编程语言中,创建了一个循环,只有很少的条件来执行迭代,直到超过限制。如果循环连续执行 6 次,那么我们可以说特定块已经迭代了 6 次。

例子:

Python3
a = [0, 5, 10, 15, 20]
for i in a:
    if i % 2 == 0:
        print(str(i)+' is an Even Number')
    else:
        print(str(i)+' is an Odd Number')


Python3
iter_list = iter(['Geeks', 'For', 'Geeks'])
print(next(iter_list))
print(next(iter_list))
print(next(iter_list))


Python3
def sq_numbers(n):
    for i in range(1, n+1):
        yield i*i
  
  
a = sq_numbers(3)
  
print("The square of numbers 1,2,3 are : ")
print(next(a))
print(next(a))
print(next(a))


输出:

迭代器

迭代器是一个包含可数数量值的对象,用于迭代可迭代对象,如列表、元组、集合等。迭代器是使用类实现的,这里不需要用于迭代的局部变量,它遵循惰性评估 表达式的评估将被暂停并存储在内存中,直到项目被专门调用,这有助于我们避免重复评估。由于实现了延迟评估,它只需要 1 个内存位置来处理值,当我们使用大型数据集时,RAM 空间的浪费将减少,同时加载整个数据集的需要将不会存在。

使用迭代器-

  • iter()关键字用于创建包含可迭代对象的迭代器。
  • next( ) 关键字用于调用可迭代对象中的下一个元素。
  • 可迭代对象完成后,再次使用它们,将它们重新分配给同一个对象。

例子:

蟒蛇3

iter_list = iter(['Geeks', 'For', 'Geeks'])
print(next(iter_list))
print(next(iter_list))
print(next(iter_list))

输出:

发电机

这是另一种以简单方式创建迭代器的方法,它使用关键字“yield”而不是在定义的函数中返回它。生成器是使用函数实现的。就像迭代器一样,生成器也遵循惰性求值。在这里,yield函数在不影响或退出函数的情况下返回数据。它将以可迭代格式返回一个数据序列,我们需要迭代该序列以使用数据,因为它们不会将整个序列存储在内存中。

例子:

蟒蛇3

def sq_numbers(n):
    for i in range(1, n+1):
        yield i*i
  
  
a = sq_numbers(3)
  
print("The square of numbers 1,2,3 are : ")
print(next(a))
print(next(a))
print(next(a))

输出:

迭代器与生成器之间的差异表

Iterator Generator

Class is used to implement an iterator

Function is used to implement a generator.

Local Variables aren’t used here.                                         

All the local variables before the yield function are stored. 

Iterators are used mostly to iterate or convert other objects to an iterator using iter() function.                                                                Generators are mostly used in loops to generate an iterator by returning all the values in the loop without affecting the iteration of the loop
Iterator uses iter() and next() functions  Generator uses yield keyword
Every iterator is not a generator Every generator is an iterator