Python for 循环 失效

昨天发现一个负责处理观察者模式的基类工作失败,默认的N个观察者负责处理 发送的一些东西,

其中提供一个内置接口移除观察者:

    def removeObserver(self, observer):

        if observer in self.observers:

            self.observers.remove(observer)

            logging.debug('remove %s', observer)

        else:

            logging.error('obj is %s , self obj is ' % (observer, self.observers))

        logging.debug('removed %s finished' % observer)

提供一个外置接口,供管理方移除观察者:

def removeAllObserver(self):

        for ob in self.observers:

            try:

                self.removeObserver(ob)

                logging.debug('Rm %s' % ob)

            except Exception, e:

                logging.error('Rm failed :  %s' % e)

让 observers = [s]

info.removeAllObserver()

这样看起来一切都很美好

继续, s1,s2,s3 三个sender在observers列表中

observers = [s1,s2,s3]

那么当调用 removeAllObserver()时, 美好的东西破碎了

仔细想想for 循环的实现, 没错,猜对了。 用了迭代器的for 循环,每次循环都只会获取一次条件中的__iter__函数来得到next()

def removeKey(src, obj):

    d.remove(obj)



if __name__ == '__main__':

    d = ['a','b','c']

    for each in d:

        removeKey(d,each)

    print d

大家可以想一下输出结果是什么~

bug的原因很简单,但是比较有意思,特此记录一下,希望帮助出现同样问题的人~

你可能感兴趣的:(python)