Python3:
>>> def a(para):
>>> for k in para.keys():
>>> para.pop(k) # 或者del para[k]
>>> print(k)
>>> a({'a':1})
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-71-9a5ca586de9e> in <module>
----> 1 a({'a':1})
<ipython-input-69-66ab94e5931e> in a(para)
1 def a(para):
----> 2 for k in para.keys():
3 para.pop(k)
4 print(k)
RuntimeError: dictionary changed size during iteration
Python2:
>>> def a(para):
>>> for k in para.keys():
>>> para.pop(k) # 或者del para[k]
>>> print(k)
>>> a({'a':1})
a
正常
以上问题出现的原因是在Python2中字典调用keys方法会返回keys的列表拷贝
>>> a({'a':1})
>>> a = {}
>>> a.keys()
[]
而Python3中则返回的是一个迭代器
>>> a = {}
>>> a.keys()
dict_keys([])
在迭代过程中修改字典结构会导致迭代器失效,如果必须要在迭代过程中修改字典结构则可以将迭代器转化为列表:
>>> def a(para):
>>> for k in list(para.keys()):
>>> para.pop(k) # 或者del para[k]
>>> print(k)
>>> a({'a':1})
a