Python for 循环 失效
2013-06-28 10:31
375 查看
昨天发现一个负责处理观察者模式的基类工作失败,默认的N个观察者负责处理 发送的一些东西,
其中提供一个内置接口移除观察者:
提供一个外置接口,供管理方移除观察者:
让 observers = [s]
info.removeAllObserver()
这样看起来一切都很美好
继续, s1,s2,s3 三个sender在observers列表中
observers = [s1,s2,s3]
那么当调用 removeAllObserver()时, 美好的东西破碎了
仔细想想for 循环的实现, 没错,猜对了。 用了迭代器的for 循环,每次循环都只会获取一次条件中的__iter__函数来得到next()
大家可以想一下输出结果是什么~
bug的原因很简单,但是比较有意思,特此记录一下,希望帮助出现同样问题的人~
其中提供一个内置接口移除观察者:
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的原因很简单,但是比较有意思,特此记录一下,希望帮助出现同样问题的人~
相关文章推荐
- python3学习之for循环
- Python之循环for(5)
- python:循环(while、for)
- python for 循环
- Python for循环
- Python中带else子句的for循环执行过程
- python for循环
- python循环控制语句(for)
- python中for、while循环、if嵌套的使用
- Python3基础 list range与for循环配合输出等差数列
- Python学习-7.Python的循环语句-for语句
- Python 循环语句之 while,for语句详解
- 一周stackoverflow热门问题选登:如何用Python for循环实现列表中数据两两循环打印?
- Python学习笔记--for, while循环后面加else的作用
- python——用lambda函数替换for循环
- python jpype 调用Hanlp,使用列表解析.toString.encode("utf-8") 会出现乱码,需用使用for 循环
- python入门(四):循环( for in 和 while)
- python开发_python中for循环操作
- python-基础知识之for循环
- Python学习(9)--for和while循环