for循环问题!

"""
问:执行完下面的代码后,  l,m的内容分别是什么?
"""


# def func(m):
#     for k,v in m.items():
#         m[k+2] = v+2
#
#
# m = {1: 2, 3: 4}
# l = m  # 浅拷贝
# l[9] = 10
# func(l)
# m[7] = 8
#
#
# print("l:", l)
# print("m:", m)


# 在迭代一个列表或字典的时候,你不能修改列表或字典的大小!

 #为什么在for循环字典或者列表的时候,不能对可迭代系列做增善操作?

我们来看下for循环的原理!!!

for xxx in 可迭代对象

首先:程序调用可迭代对象的__iter__()方法,返回一个迭代器

然后:调用迭代器的__next__()方法,每调用一次,得到迭代器的一个值,赋值给xxx,直到捕获Stopiteration为止,

最后完成迭代,

也就是说,拿到迭代器的时候,可迭代对象的大小已经确定了,所以循环过程中对可迭代对象的增删操作,就会报错!!!

posted @ 2018-05-30 21:17  木夂口  阅读(138)  评论(0)    收藏  举报
levels of contents