Python yield关键字

Python yield关键字

在Python中,”yield”是一种关键字,用于与生成器一起使用。与Python中的普通或经典函数不同,普通函数使用关键字”return”返回输出或值,而生成器使用”yield”关键字进行相同的操作。

在本文中,我们将讨论Python中的yield关键字,它是什么,它是如何工作的,它的重要性以及在Python中的实现。本文将帮助人们理解Python中的yield关键字,并在必要时帮助人们使用和实现相同。

所以让我们从yield关键字背后的核心想法开始讨论。

什么是yield关键字

在Python中,生成器是一种用于迭代过程的函数类型。顾名思义,当调用时,这些函数会即时生成值或输出,这意味着它像迭代器一样连续生成值,而不会停止。

与Python中的常规函数相同,常规函数使用return关键字从函数中获取输出,在生成器的情况下,使用yield关键字生成临时输出。生成器函数的执行在临时基础上停止,并且可以在以后继续执行。

在Python中,当定义生成器函数执行与迭代相关的某些任务时,使用next关键字,连续生成输出或值,并持续生成下一个值。一旦遇到yield关键字,函数就会在那里停止,这里函数保存了生成器的当前状态,然后停止。

请注意,当生成器函数再次恢复或再次执行时,值将从其停止的位置开始生成,而不是从起始点开始,因为在遇到yield关键字时函数保存了其状态。

简而言之,yield关键字可以被视为生成器关键字的断点,生成器在此关键字之后停止并保存其进展,这在普通或经典函数中是不会做的。

使用yield函数的优势

当与生成器函数一起使用时,yield函数提供了几个优势。让我们逐一讨论。

更快的过程

正如我们所知,生成器是一种连续生成值的函数类型。借助yield关键字,我们可以更快地对生成器进行操作。它使生成器能够立即为大型数据集生成值。

无限输出

使用yield关键字和生成器,我们可以生成无限的值或输出,因为它是一个迭代过程。

效率

如前所述,yield关键字有助于为生成器函数更快地生成值。它帮助生成和处理数据,而不需要加载整个数据。

可扩展的代码

在编写迭代过程的代码时,代码很容易混乱并且不可扩展。生成器的yield关键字有助于编写高效且可扩展的代码,这易于理解和解释。

使用yield关键字:代码示例

现在让我们讨论一些用于实现yield函数的代码示例,以清楚地理解其原理。

示例1:生成数字的平方

让我们尝试实现生成器函数,我们将编写一段代码来获取数字的平方。由于我们将在这里使用生成器,值将持续生成。

# define the generator function to square the numbers
def square_of_numbers(n):
    for i in range(1, n + 1):
        yield i ** 2

# Call the generator function defined above
squares_gen = square_of_numbers(7) #squares of seven numbers will be printed in the output 

for square in squares_gen:
    print(square)

如图所示,上面的代码示例定义了一个名为 square generator 的函数,它使用 for 循环迭代这些值,并在最后使用 yield 关键字来获取这些值的平方。 由于我们调用了传递 7 作为输出的函数,所以该函数将给出七个不同的输出,对应于所给值的平方。 输出如下所示:

1
4
9
16
25
36
49

示例2:使用过滤器添加字符串

现在让我们来看一个字符串的例子。在这里,我们将把字符串作为输入,并使用带有yield关键字的生成器函数来通过应用一些过滤器来添加相应的字符串。

def adding_strings_with_filter(str1, str2):
    for char in str1:
        if char.isalpha(): 
            yield char.upper()
    for char in str2:
        if char.isalpha(): 
            yield char.upper()

# Define the two strings to concatenate

# Also, use the join function to join the strings after applying the filter with the help of generator function

string1 = "TutorialsPoint, is good?"
string2 = "123 for tutorials! 456"
result = "".join(adding_strings_with_filter(string1, string2))

print(result)

在上述代码示例中,我们定义了一个名为add_string_with_filter的函数,该函数通过使用filter将两个字符串作为输入。然后使用yield关键字使用两个循环来获取所需的字符串,在每个循环结束时,yield关键字返回一个具有非字母大写字符的字符串。

最后,使用普通的join函数将生成器的输出字符串添加起来。

输出

以下代码的输出将是:

TUTORIALSPOINTISGOODFORTUTORIALS

示例3:带有自定义逻辑的生成器函数

现在让我们举一些独特的例子来使用生成器和yield关键字,这里我们将定义一个函数,在循环中为某些值返回特定的字符串值。

# defining the generator function
def custom_logic_generator():
    num = 1
    while True:
        if num % 3 == 0:
            yield "divisible by 3" #print divisible by 3
        elif num % 9 == 0:
            yield "divisible by  3" #print divisible by 3
        elif num % 10 == 0:
            yield "divisible by 10" #print divisible by 10

        else:
            yield num
        num += 1

# call the generator function defined above
seq_gen = custom_logic_generator()

# generate the numbers one by list with the above applied logic of the generators
for _ in range(10):
    print(next(seq_gen))

如上面的代码示例所示,定义了一个函数,它打印从1到10的值。在这里,我们使用yield关键字定义自定义逻辑。例如,如果数字可以被3整除,那么函数将返回一个字符串“divisible by three”,而不是将3打印为数值。与可以被10整除的数字也是一样的。

输出

以下代码的输出将是:

1
2
divisible by 3
4
5
Divisible by 3
7
8
divisible by 3
divisible by 10

结论

在本文中,我们讨论了生成器中的yield关键字,它的作用是什么,如何工作以及yield关键字和生成器的优势,并且讨论了两个不同的代码示例来实现相同的功能。本文将帮助读者理解yield关键字背后的核心思想,并帮助读者在必要时将相同的概念应用于编写高效的代码。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程