Python 中的生成器


Python 中的生成器是一个使用 Yield 关键字返回迭代器的函数。在本文中,我们将讨论生成器函数在 Python 中的工作原理。

\Python 中的生成器函数\

Python 中的生成器函数的定义与普通函数类似,但每当它需要生成一个值时,它都会使用Yield 关键字而不是 return 来生成。如果 def 的主体包含yield,则该函数将自动成为 Python 生成器函数。

在 Python 中创建生成器

在Python中,我们只需使用def关键字和yield关键字就可以创建生成器函数。生成器在Python中具有以下语法:

def function_name():
    yield statement

\例子:**

在此示例中,我们将创建一个简单的生成器,它将生成三个整数。然后我们将使用 Python for 循环打印这些整数。

  • Python3
# A generator function that yields 1 for first time,
# 2 second time and 3 third time
def simpleGeneratorFun():
    yield 1     
    yield 2     
    yield 3     

# Driver code to check above generator function
for value in simpleGeneratorFun():
    print(value)

\输出:**

1 
2 
3

\生成器对象\

Python Generator 函数返回一个可迭代的生成器对象,即可以用作Iterator。生成器对象可以通过调用生成器对象的 next 方法或在“for in”循环中使用生成器对象来使用。

\例子:\

  • Python3
# A Python program to demonstrate use of
# generator object with next()

# A generator function
def simpleGeneratorFun():
    yield 1
    yield 2
    yield 3

# x is a generator object
x = simpleGeneratorFun()

# Iterating over the generator object using next

# In Python 3, __next__()
print(next(x))
print(next(x))
print(next(x))

\输出:**

1 
2 
3

\例子:**

在此示例中,我们将为斐波那契数创建两个生成器,第一个是简单的生成器,第二个使用for 循环的生成器。

  • Python3
# A simple generator for Fibonacci Numbers
def fib(limit):

    # Initialize first two Fibonacci Numbers
    a, b = 0, 1

    # One by one yield next Fibonacci Number
    while a < limit:
        yield a
        a, b = b, a + b

# Create a generator object
x = fib(5)

# Iterating over the generator object using next
# In Python 3, __next__()
print(next(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))

# Iterating over the generator object using for
# in loop.
print("\nUsing for in loop")
for i in fib(5):
    print(i)

\输出:**

0
1
1
2
3

Using for in loop
0
1
1
2
3

Python 生成器表达式

在Python中,生成器表达式是编写生成器函数的另一种方式。它使用 Python列表理解技术,但不是将元素存储在内存中的列表中,而是创建生成器对象。

生成器表达式语法

Python 中的生成器表达式具有以下语法:

(expression for item in iterable)

\例子:**

在此示例中,我们将创建一个生成器对象,该对象将打印 0 到 5 范围内的 5 的倍数,这些倍数也可被 2 整除。

  • Python3
# generator expression
generator_exp = (i * 5 for i in range(5) if i%2==0)

for i in generator_exp:
    print(i)

\输出:\

0 
10 
20

\Python 中生成器的应用\

假设我们创建一个斐波那契数流,采用生成器方法使其变得微不足道;我们只需调用 next(x) 即可获取下一个斐波那契数,而不必关心数字流在何时何地结束。一种更实用的流处理类型是处理大型数据文件,例如日志文件。生成器为此类数据处理提供了一种节省空间的方法,因为在一个给定时间点仅处理文件的一部分。我们也可以使用 Iterators 来达到这些目的,但是 Generator 提供了一种快速的方法(我们不需要在这里编写 nextiter 方法)。


原文链接:codingdict.net