Python for 循环 失效
2024-10-14 04:36:05
昨天发现一个负责处理观察者模式的基类工作失败,默认的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的原因很简单,但是比较有意思,特此记录一下,希望帮助出现同样问题的人~
最新文章
- Maven 常用的命令
- javascript获取表单值的7种方式
- oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
- opencv6.4-imgproc图像处理模块之直方图与模板
- swift中的结构体和枚举
- hdu 4418 Time travel 概率DP
- linux lnmp编译安装
- dapper 写查询sql 时,多条件参数操作方法
- Java 文件操作大全
- [资源共享]C#+AE构建GIS桌面端应用系统框架-全代码
- iOStextView的代理方法展示
- select into
- [蓝桥杯]2015蓝桥省赛B组题目及详解
- APP界面设计 大概总结
- Mybatis(五) 延迟加载和缓存机制(一级二级缓存)
- MySQL8.0 优化
- nginx里proxy_pass有无/的区别
- MySQL创建外键约束的报错Error : Can't create table '#sql-534_185' (errno: 150)
- 基于SecureCRT的测试环境的克隆的linux/vi相关命令
- Spring JdbcTemplate 查询结果集Map反向生成Java实体(转)