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

 更新时间:2023年08月21日 14:53:34   作者: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关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python matlab库简单用法讲解

    python matlab库简单用法讲解

    在本篇文章里小编给大家整理了一篇关于python matlab库简单用法讲解内容,有需要的朋友们可以学习下。
    2020-12-12
  • Python中最神秘missing()函数介绍

    Python中最神秘missing()函数介绍

    大家好,本篇文章主要讲的是Python中最神秘missing()函数介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • python3.5实现socket通讯示例(TCP)

    python3.5实现socket通讯示例(TCP)

    本篇文章主要介绍了python3.5实现socket通讯示例(TCP),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Python实现多路视频多窗口播放功能

    Python实现多路视频多窗口播放功能

    这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • python将ansible配置转为json格式实例代码

    python将ansible配置转为json格式实例代码

    这篇文章主要介绍了python将ansible配置转为json格式实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • pycharm 主题theme设置调整仿sublime的方法

    pycharm 主题theme设置调整仿sublime的方法

    今天小编就为大家分享一篇pycharm 主题theme设置调整仿sublime的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python星号*与**用法分析

    Python星号*与**用法分析

    这篇文章主要介绍了Python星号*与**用法,结合实例形式较为详细的分析了Python中的星号*与**在函数参数及数值运算中的相关使用技巧,需要的朋友可以参考下
    2018-02-02
  • Python使用random.shuffle()打乱列表顺序的方法

    Python使用random.shuffle()打乱列表顺序的方法

    今天小编就为大家分享一篇Python使用random.shuffle()打乱列表顺序的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python中remove漏删和索引越界问题的解决

    Python中remove漏删和索引越界问题的解决

    这篇文章主要介绍了Python中remove漏删和索引越界问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Django实现发送邮件找回密码功能

    Django实现发送邮件找回密码功能

    在各大网站上,一定都遇到过找回密码的问题,通常采用的方式是通过发送带有验证码的邮件进行身份验证,本文将介绍通过Django实现邮件找回密码功能,需要的朋友可以参考下
    2019-08-08

最新评论