> 文章列表 > python 生成器yield后跟字典数据类型

python 生成器yield后跟字典数据类型

python 生成器yield后跟字典数据类型

今天做项目时,出现了一个问题,debug了好久,记录如下:

函数1我设置一个生成器,生成器关键字yield后面跟的是一个字典类型。

def func1():

        dic1  = dict()

        for i in range(10):

                dic1[i] = i

                yield dic1

在函数外进行for循环遍历,当满足某一条件进行update(dic2)操作时,发现update操作后,后面几次循环中i的键值也会变成update操作之后的键值。

ff1 = func1()

for i in ff1:

        if 1 in i.keys():

                i.update({'test':'test'})

         print(i)

##

{0: 0}
{0: 0, 1: 1, 'test': 'test'}
{0: 0, 1: 1, 'test': 'test', 2: 2}
{0: 0, 1: 1, 'test': 'test', 2: 2, 3: 3}
{0: 0, 1: 1, 'test': 'test', 2: 2, 3: 3, 4: 4}
{0: 0, 1: 1, 'test': 'test', 2: 2, 3: 3, 4: 4, 5: 5}
{0: 0, 1: 1, 'test': 'test', 2: 2, 3: 3, 4: 4, 5: 5, 6: 6}
{0: 0, 1: 1, 'test': 'test', 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7}
{0: 0, 1: 1, 'test': 'test', 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8}
{0: 0, 1: 1, 'test': 'test', 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}

yield返回的迭代器直接指向dic1