分享

说说Python中yield的用法?

 程序IT圈 2021-01-16

公众号新增加了一个栏目,就是每天给大家解答一道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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多