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

相关文章

  • 安装pycurl报错Could not run curl-config: 'curl-config'

    安装pycurl报错Could not run curl-config: &ap

    这篇文章主要为大家介绍了安装pycurl报错Could not run curl-config: 'curl-config'解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Python尾递归优化实现代码及原理详解

    Python尾递归优化实现代码及原理详解

    这篇文章主要介绍了Python尾递归优化实现代码及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • pandas.cut具体使用总结

    pandas.cut具体使用总结

    这篇文章主要介绍了pandas.cut具体使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • python+PyQT实现系统桌面时钟

    python+PyQT实现系统桌面时钟

    这篇文章主要为大家详细介绍了python+PyQT实现系统桌面时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python中免验证跳转到内容页的实例代码

    Python中免验证跳转到内容页的实例代码

    在本篇文章里小编给大家整理的是一篇关于Python中免验证跳转到内容页的实例代码,有兴趣的朋友们可以学习分享下。
    2020-10-10
  • python微信跳一跳系列之棋子定位颜色识别

    python微信跳一跳系列之棋子定位颜色识别

    这篇文章主要为大家详细介绍了python微信跳一跳系列之棋子定位之颜色识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python数据可视化之Seaborn的使用详解

    Python数据可视化之Seaborn的使用详解

    Seaborn库是python中基于matplotlib库的可视化工具库,通过sns我们可以更方便地绘制出更美观的图表。本文将分享python基于Seaborn库的一系列绘图操作,感兴趣的可以了解一下
    2022-04-04
  • python 统计文件中的字符串数目示例

    python 统计文件中的字符串数目示例

    今天小编就为大家分享一篇python 统计文件中的字符串数目示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 简单谈谈Python中的几种常见的数据类型

    简单谈谈Python中的几种常见的数据类型

    Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
    2017-02-02
  • python pandas 对series和dataframe的重置索引reindex方法

    python pandas 对series和dataframe的重置索引reindex方法

    今天小编就为大家分享一篇python pandas 对series和dataframe的重置索引reindex方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论