4

我刚刚被一个如果list是 Python 中的保留字就可以防止的错误所困扰。(可以肯定的是,我的邓伯里。)

那么为什么 list (或 dict 或 float 或任何类型)不是保留字呢?添加解释器错误似乎比尝试记住规则更容易。

(我也知道 Eclipse/PyDev 有一个设置会提醒你这条规则,这很有用。)

4

4 回答 4

15

仅保留关键字。

list不是关键字而是内置类型,如str, set, dict, unicode, int,float等。

保留所有可能的内置类型是没有意义的。python 是一种动态语言,如果您想用隐藏它的本地名称替换内置类型,您应该可以。

list其他类型视为对象类型的预导入库;你也不希望defaultdictcollections被保留?

使用静态代码分析器来捕获此类错误;大多数 IDE 都可以让您轻松集成其中一个。

于 2013-02-04T20:00:33.727 回答
2

看看这个:http ://docs.python.org/2/reference/lexical_analysis.html#keywords

list只是一个类型并且不是保留的(也不是int, float, dict, str... 你明白了)。

于 2013-02-04T20:07:07.333 回答
0

可能出于相同的原因哪些类没有私有属性。这就是 Python 的精神。

于 2013-02-04T20:06:25.370 回答
0

这是一个意见问题,但这是我的 2c。

保留关键字是一件大事,因为本质上这意味着您永远不能在代码中使用该关键字,因此通常认为保持列表简短的良好编程语言设计。(perl 没有,但是 perl 与大多数其他编程语言具有完全不同的理念,并在变量之前使用特殊符号来尝试防止冲突)。

无论如何,要了解为什么会这样,请考虑前向兼容性。想象一下,python 开发人员决定这array是一个如此基本的概念,以至于他们想让它成为一个内置的(不是不可想象的——这发生set在,嗯,python 2.6 中?)。如果内置函数被自动保留,那么任何以前使用array过其他东西的人(即使显式导入为 a from superfastlist import array),或者实现了自己的(numpy已经这样做了),都会突然发现他们的代码不起作用,他们会非常愤怒。

(就此而言,请考虑是否help将其设为保留字 - 包括 argparse 在内的无数库help用作关键字参数)

于 2014-12-29T20:29:19.777 回答