zoukankan      html  css  js  c++  java
  • 深入理解python中的yield关键字

    想必大家都看过这样的代码:

    上面的这段代码会计算0-9的平方并打印出来。

    那么问题来了,这段代码和我们要说的东西有什么区别呢?

    这里的关键字,yield,我在前面的文章里已经发过了。那么yield是什么呢?要理解yield,还得从容器说起。

    容器(container)

    象列表(list),集合(set),元组(tuple)--又叫序列,字典(dict)都是容器。简单的说,容器是一种把多个元素组织在一起的数据结构,可以逐个迭代获取其中的元素。容器可以用in来判断容器中是否包含某个元素,如:

    大多数的容器都是可迭代对象,可以使用某种方式访问容器中的每一个元素(详情见生成器迭代器)

    迭代器内容详见之前博客

    生成器和yield

     生成器其实是一种特殊的迭代器,但是不需要象迭代器一样实现__iter__和__next__方法,只需要使用关键字yield就可以

    我们用生成器时间一个斐波那契数列:

    输出:

     上面的fib函数中没有return关键字。当运行f = fib()的时候,它返回的是一个生成器对象。在调用fib()的时候并不会运行fib函数中的代码,只有在调用next()的时候才会真正运行其中的代码。

    那么回到最开始的问题,两种方式有什么区别?

    其实,使用生成器调用函数的时候不会一次性生成所有的元素,而在每次调用next()才生成一个元素;而另一种方式,在调用函数的时候就生成了所有元素,相比之下,更耗费内存和CPU

    那么,看到这里,大家是不是理解了yield关键字呢?

  • 相关阅读:
    shell学习(11)- seq
    bash快捷键光标移动到行首行尾等
    shell学习(10)- if的使用
    Python 执行 Shell 命令
    查看 jar 包加载顺序
    Linux 中的 sudoers
    Ubuntu 开机启动程序
    指定 Docker 和 K8S 的命令以及用户
    Spark on K8S(Standalone)
    Spark on K8S (Kubernetes Native)
  • 原文地址:https://www.cnblogs.com/ALADL/p/9584803.html
Copyright © 2011-2022 走看看