说说Python中yield的用法?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python中yield的用法?

答:Python中有一个非常有用的语法叫做生成器,用到的关键字就是yield。yield的作用是把一个函数变成生成器(generator),起到一个延迟的作用,在需要的时候产生结果,这样可以有效地节约系统资源,避免不必要的内存占用。

可以先把yield看做return,就是在程序中返回某个值,返回之后程序就不再往下运行。看下面代码,程序开始执行以后,因为getNum函数中有yield关键字,所以getNum函数并不会真的执行,而是先得到一个生成器。直到调用next方法,getNum函数正式开始执行,先执行getNum函数中的print方法,然后进入while循环 。

def getNum(n):
    print("执行程序")
    i = 0 ;
    while i <= n:
        # return i
        yield i
        i += 1;
# print(getNum(5))
a = getNum(5)
print(next(a))
print(next(a))

输出结果:
执行程序
0
1

可以看出yield和return的区别:带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行的,所以调用next的时候,生成器并不会把函数重新执行,只是接着上一步停止的地方开始 。

再来看一个生成器send函数的例子。看下面代码,为什么执行结果有个None值?这里给大家留个小问题,大家可以自己思考下,然后在评论区留言谈论,这个也是小知识点哦 。

def getNum(n):
    print("执行程序")
    i = 0 ;
    while i <= n:
       temp = yield i
       print(temp)
       i += 1;
a = getNum(5)
print(next(a))
print(a.send("程序IT圈"))
print(next(a))

输出结果:----

执行程序
0
程序IT圈
1
None
2

再给大家推荐个yield博客链接:

https://blog.csdn.net/mieleizhi0522/article/details/82142856

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-40、Python面试1-40题汇总

41、说说Python中的正则表达式?
42、Python如何实现斐波那契数列?
43、说说Python 中 is 和 == 的区别?
44、说说Python如何实现杨辉三角?
45、说说Python中变量的作用域?
46、Python打印九九乘法表有几种方式?
47、Python中列表常见的方法有哪些?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • Python学习——for循环,生成器,迭代器详解

    文章目录 Python的for循环 for循环示例 List 列表循环 dict 字典循环 列表生成式 生成器 列表式生成器 函数式生成器 生成器式生产者消费者模型 迭代器 什么是迭代器 再论for循 ...

  • 面试题-python 什么是生成器(generator)?

    前言 在 Python 中,带有 yield 的函数在 Python 中被称之为 generator(生成器). 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器 ...

  • python中partial()基础用法说明

    前言 一个函数可以有多个参数,而在有的情况下有的参数先得到,有的参数需要在后面的情景中才能知道,python 给我们提供了partial函数用于携带部分参数生成一个新函数. 在functools模块中 ...

  • 【读码】python中的小星星*用法示例

    读懂代码很难的,比写代码还难,但也是最节约时间最好的学习方式之一.今天我们通过读代码来了解一下python中的 * 或者 ** .通过读代码,帮助我们学习python中的 * 功用.这里我一共列了8个 ...

  • 说说Python中with的用法?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • UC头条:在Python中使用Lambda函数的5种用法

    引言 Lambda 函数(也称为匿名函数)是函数式编程中的核心概念之一. 支持多编程范例的 Python 也提供了一种简单的方法来定义 lambda 函数. 用 Python 编写 lambda 函数 ...

  • Python中虚拟环境venv的基本用法

    环境windows 7 venv为python3中的默认库,无需安装. 创建新的venv方法, 在当前文件夹下执行cmd,输入如下代码 python -m venv bob -m: run libra ...

  • Python中read()、readline()和readlines()三者间的区别和用法

    众所周知在python中读取文件常用的三种方法:read(),readline(),readlines(),今天看项目是又忘记他们的区别了.以前看书的时候觉得这东西很简单,一眼扫过,待到用时却也只知道 ...

  • Python中struct.pack()和struct.unpack()用法详细说明

    python 中的struct主要是用来处理C结构数据的,读入时先转换为Python的 字符串 类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~.一般输入的渠道来源于文件或者网 ...

  • Python中read()、readline()和readlines()的用法简单案例

    首先我们先建立一个测试文件,test.txt 1.read() 用法: 从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止,它范围为字符串对象. # 打开含中文的文本 fi ...

  • Python 中的函数装饰器和闭包

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回, ...