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关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何基于opencv实现简单的数字识别

    如何基于opencv实现简单的数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别,下面这篇文章主要给大家介绍了关于如何基于opencv实现简单的数字识别,需要的朋友可以参考下
    2021-09-09
  • Python预测2020高考分数和录取情况

    Python预测2020高考分数和录取情况

    这篇文章主要介绍了Python预测2020高考分数和录取情况可能是这样,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python实现自动识别并填加验证码的示例代码

    Python实现自动识别并填加验证码的示例代码

    实现自动识别网页中的验证码并填写,需要结合使用网络爬虫技术、图像识别(OCR),以及可能的浏览器自动化工具(如Selenium),本文给大家介绍了Python实现自动识别并填加验证码的示例,需要的朋友可以参考下
    2024-06-06
  • python 列表递归求和、计数、求最大元素的实例

    python 列表递归求和、计数、求最大元素的实例

    今天小编就为大家分享一篇python 列表递归求和、计数、求最大元素的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python+requests接口自动化框架的实现

    python+requests接口自动化框架的实现

    这篇文章主要介绍了python+requests接口自动化框架的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python 读写、创建 文件的方法(必看)

    python 读写、创建 文件的方法(必看)

    下面小编就为大家带来一篇python 读写、创建 文件的方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • Python驱动ansys执行apdl文件的代码示例

    Python驱动ansys执行apdl文件的代码示例

    在Python中驱动ANSYS执行APDL(ANSYS Parametric Design Language)文件,可以通过使用subprocess模块来调用ANSYS的可执行文件,并传递APDL文件作为参数,本文给大家介绍了一个详细的代码示例,需要的朋友可以参考下
    2024-11-11
  • Django中url与path及re_path的区别说明

    Django中url与path及re_path的区别说明

    这篇文章主要介绍了Django中url与path及re_path的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python实现全局变量的两个解决方法

    Python实现全局变量的两个解决方法

    这篇文章主要介绍了Python实现全局变量的两个解决方法,需要的朋友可以参考下
    2014-07-07
  • 从零开始安装Conda并搭建Python环境的全过程

    从零开始安装Conda并搭建Python环境的全过程

    conda是一个开源的包、环境管理器,可以用于在同一个机器上创建不同的虚拟环境,这篇文章主要介绍了安装Conda并搭建Python环境的相关资料,需要的朋友可以参考下
    2025-04-04

最新评论