python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python yield关键字

Python中yield关键字的理解与使用

作者:python收藏家

yield关键字用于创建生成器函数,一种高效利用内存的函数类型,可以像迭代器对象一样使用,本文主要介绍了Python中的yield关键字的应用,需要的可以参考下

在本文中,我们将介绍Python中的yield关键字。在开始之前,让我们了解一下yield关键字的定义。

Python中yield关键字的语法:

def gen_func(x):
    for i in range(x):
        yield i

yield关键字有什么作用

yield关键字用于创建生成器函数。一种高效利用内存的函数类型,可以像迭代器对象一样使用。

通俗地说,yield关键字将把任何与它一起给出的表达式转换为生成器对象,并将其返回给调用者。因此,如果希望获得存储在生成器对象中的值,则必须迭代生成器对象。

Python中return和yield的区别

Python中的yield关键字类似于用于返回值的return语句,它将生成器对象返回给调用包含yield的函数的人,而不是简单地返回一个值。它们之间的主要区别是,return语句终止函数的执行。而yield语句只暂停函数的执行。另一个区别是return语句永远不会执行。而当函数恢复其执行时执行yield语句。

yield优点:

使用yield关键字是非常高效的,因为只有当调用者遍历对象时才会执行。

当变量状态被保存时,我们可以从同一点暂停和恢复,从而节省时间。

yield缺点:

有时,由于函数生成器多次返回值,因此很难理解代码流。

必须正确处理生成器函数的调用,否则可能会导致程序错误。

示例1-Python中的Generator函数和yield关键字

生成器函数的行为与普通函数一样,但具有一个定义特征。Python生成器函数使用yield关键字,而不是返回数据。生成器的主要好处是它们自动创建函数__iter__()和next()。生成器提供了一种非常整洁的技术来生成巨大或无限的数据。

def fun_generator():
    yield "Hello world!!"
    yield "Geeksforgeeks"
obj = fun_generator()
print(type(obj))
print(next(obj))
print(next(obj))

输出:

<class 'generator'>
Hello world!!
Geeksforgeeks

示例2-生成无限序列

在这里,我们使用yield生成一个无限序列,yield返回数字并将num递增+ 1。

注意:这里我们可以观察到num+=1在yield之后执行,但是在return的情况下,在return关键字之后没有执行。

def inf_sequence():
    num = 0
    while True:
        yield num
        num += 1
for i in inf_sequence():
    print(i, end=" ")

输出:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96.......

示例3-在列表中使用yield

在这里,我们从列表中提取偶数。

# generator to print even numbers
def print_even(test_list):
    for i in test_list:
        if i % 2 == 0:
            yield i
# initializing list
test_list = [1, 4, 5, 6, 7]
# printing initial list
print("The original list is : " + str(test_list))
# printing even numbers
print("The even numbers in list are : ", end=" ")
for j in print_even(test_list):
    print(j, end=" ")

​输出:

The original list is : [1, 4, 5, 6, 7]
The even numbers in list are :  4 6 

示例4-使用yield关键字作为布尔值

可能的实际应用是,当处理最后一个数据量并从中搜索细节时,可以使用yield,因为我们不需要从头开始重新查找,从而保存时间。根据使用情况,可能存在许多yield应用。 ​

# func to count number of given word
def print_even(test_string):
    for i in test_string:
        if i == "geeks":
            yield i
# initializing string
test_string = " There are many geeks around you, \
              geeks are known for teaching other geeks"
# count numbers of geeks used in string
count = 0
print("The number of geeks in string is : ", end="")
test_string = test_string.split()
for j in print_even(test_string):
    count = count + 1
print(count)

​输出:

The number of geeks in string is: 3

到此这篇关于Python中yield关键字的理解与使用的文章就介绍到这了,更多相关Python yield关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文