dram.me

学习Python: dict.iterkeys vs dict.keys

Python的字典容器有三个 iter* 的方法,除iterkeys外,还有iteritems, itervalues,之前我一直没注意到还有这些函数。从名字就可以看出来,它们和keys, items, values的区别,前者返回递代器,而后者返回列表。但既然有了 iter* 了,那返回列表的那些函数为什么还存在呢?不是list(d.iterkeys())转化一下就可以了吗?这不是Python的风格啊?

问问google,发现这个问题在Python3.0中已经解决了,也就是去除了 d.iter* 这几个函数,再把d.keys, d.items, d.values的功能改为原先 d.iter* 的功能。GvR的建议是现在一律用 d.iter* ,这样在需要从Python2.x转移到3时候,只用2to3这个工具转化一下就可以了。具体看GvR的这个PPT: Python 3000 and You

这个我好像无法追溯到源头,看来这个想法是由来已久啊。当然pep-3100上肯定是提到了。不过还是有不一样的声音,这里就有非常激烈的讨论,有空看一下。