美文网首页
2018-05-14 关于yield的入门级理解

2018-05-14 关于yield的入门级理解

作者: 一朵_蒲公英 | 来源:发表于2018-05-14 18:43 被阅读0次

书写代码如下:


list = []

def func():

    dic = {}

    for i in range(1,6):

        dic[i] = i

        yield dic

print('*****开始*****')

for i in func():

    print(i)

    list.append(i)

print('*****分隔*****')

print(i)

print('*****结束*****')


*****开始*****

{1: 1}

{1: 1, 2: 2}

{1: 1, 2: 2, 3: 3}

{1: 1, 2: 2, 3: 3, 4: 4}

{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}

*****分隔*****

{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}

'*****结束'*****


首先,yield用在def定义的函数中,执行函数也不会执行函数内的代码,要用next()命令才能使函数代码被执行并返回下一条迭代器元素,而用for循环遍历此函数,相当于执行了所有可执行的next()命令(要注意的是,next()命令超出可迭代次数会报错),此时函数内的代码会被执行(在次遍历中,被循环的是yield内容,函数依然执行一次)。

其次,yield返回的是一个迭代器类,与return不同。可以理解为可以循环的东西,故而后面用到了for i in func(),因为func()代表着yield返回值,也就是可以循环的迭代器。

再次,用for来遍历yield返回的可循环内容时,与普通的list等有很大不同,每一次都会把前面所有的遍历元素都带上,也就是循环得到的结果数量会从1到len(func())这样,越来越多,而不是只有1个结果,每个元素都单列出来。

最后,若在循环遍历yield的时候,用list来append,最终的list只会得到不重复的、所有yield中的元素,而不是通常理解中的,把每次遍历的结果都组合进去。可以利用这种方式,把dic和list组合起来,list.append(dic),来生成json数据。

——————以上

相关文章

  • 2018-05-14 关于yield的入门级理解

    书写代码如下: list = [] def func(): dic = {} for i in range...

  • 关于yield与 yield from的理解

    以下属于自我的理解,如果不太明白,别问我,我也很萌逼。 1.yield 主要用来生成一个生成器,每一次调用就返回一...

  • 重点汇总-python-gitbook-重要点学习-1

    Python中关键字yield有什么作用? 为了理解yield有什么用,首先得理解generators,而理解ge...

  • yield的理解

    参考文档:https://www.ibm.com/developerworks/cn/opensource/os-...

  • http的理解

    title: http理解(上)date: 2018-05-14 11:45:25tags: http的理解 TC...

  • pytest-fixture中的yield及autouse

    记录一下fixture中关于yield以及autouse参数的两个小细节。 yield yield在fixture...

  • Python

    怎样理解for循环中用yield{}的用法

  • Python yield关键字

    Python中yield关键字解释 这篇文章关于python的yield关键字。并且文章中会解释什么是yield,...

  • 迭代器

    我发现我之前还是没有理解迭代器。 最初的理解 定义的函数中有 yield 就是一个迭代器。 yield 只是暂时将...

  • yield的作用理解

    Python中的yield和java中的不同,java中的yield是妥协的意味,让出cpu给其他线程执行,但不保...

网友评论

      本文标题:2018-05-14 关于yield的入门级理解

      本文链接:https://www.haomeiwen.com/subject/humjdftx.html