Python 可变对象和迭代器 注意点

xiaoxiao2021-02-27  425

记住,在迭代可变对象的时候修改它们并不是个好主意. 这在迭代器出现之前就是一个问题. 一个流行的例子就是循环列表的时候删除满足(或不满足)特定条件的项: for eachURL in allURLs: if not eachURL.startswith('http://'): allURLs.remove(eachURL) # YIKES!! 除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你 当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上. 在迭代字典的 key 时, 你绝对不能改变这个字典. 使用字典的 keys() 方法是可以的, 因为 keys() 返回一个独立于字典的列表. 而迭代器是与实际对象绑定在一起的, 它将不会继续执行下 去: >>> myDict = {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> for eachKey in myDict: ... print eachKey, myDict[eachKey] ... del myDict[eachKey] ... a 1 Traceback (most recent call last): File "", line 1, in ? RuntimeError: dictionary changed size during iteration 这样可以避免有缺陷的代码. 更多有关迭代器的细节请参阅 PEP 234 .
转载请注明原文地址: https://www.6miu.com/read-2902.html

最新回复(0)