为什么Python的namedtuple实例是从字符串模板创建的?

时间:2014-03-11 22:48:48

标签: python python-2.7 collections namedtuple

在我阅读Python的collections模块(http://hg.python.org/cpython/file/2.7/Lib/collections.py#l234)的源代码时,我发现namedtuple函数从字符串模板创建了一个类的定义,使用exec执行。为什么不通过简单地定义函数内部的类来完成它,就像你在编写装饰器时那样做?在我看来,这将是更可读和更可靠的解决方案,不是吗?我敢打赌Python核心开发人员知道他们做了什么,所以我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

Raymond Hettinger在他的original ActiveState recipe

中简要提到了这一点
  

感谢Peter Kovac指出关键字的缺陷   参数检查。由于他的评论,配方已经演变为   它目前的exec风格,我们得到了所有Python的高速内置   参数免费检查。新的建筑风格和执行力   模板使__new____repr__函数的速度更快   比以前版本的食谱清洁。