2013-02-04 1445 views
4

如果list是Python中的一个保留字,我刚刚得到了一个可能被阻止的错误。 (当然是Dumbery)为什么'list'是Python中的保留字?

那么,为什么不列出(或字典或浮动或任何类型)保留字?添加解释器错误似乎比尝试和记住规则更容易。

(我也知道的Eclipse/PyDev的有会提醒你这个规则,这可能是有用的设置。)

+3

假设'list'是一个保留字。那么如果你想*这样做,你将如何改变它提到的类型? – kindall

+1

如果您担心这些错误,请使用['pylint'](http://pypi.python。例如,'pylint'会给你''W:3,0:重新定义内置的函数,在'list'中。 – abarnert

+0

@kindall:这是一种内置类型的常见用例吗? – BenDundee

回答

14

只有keywords被保留。

list不是一个关键字,但内置的类型,是strsetdictunicodeintfloat

有一个在保留每一个可能毫无意义内置型; python是一种动态语言,如果你想用本地名称来替换内置类型,你应该能够。

认为list和其他类型为预先导入的对象类型库;您不希望collectionsdefaultdict被保留吗?使用static code analyzer来捕捉这些错误;大多数IDE让你轻松整合一个。

+0

这个问题已经在邮件列表上提出了大概一年一次,有人建议它至少应该是一个警告,如果不是错误的话。 ,共识是,“这不应该用语言,但有人应该建立一个良好的棉绒。”每一次从那以后,这是“人们建立良好的短绒已经处理了这个,所以使用它。“如果任何人有任何这些线程的链接来给出理由,这可能会有所帮助。 – abarnert

+0

@abarnert:我能找到的所有关于允许关键字作为2000年IronPython的标识符的讨论.. –

+0

是的,我在发布之前自己搜索了它,并且找不到任何更简单的东西。但我知道我已经看到它反复出现,形式从“'None'应该是关键字”到“builtin中的所有内容都应该是关键字”,有时引用解释器优化机会而不是错误检查......哦,我认为答案已经足够好了。 – abarnert

0

可能出于同样的原因,哪些类不具有私有属性。这是Python的精神。

0

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

保留一个关键字是一件大事,因为它基本上意味着你永远不能在代码中使用该关键字,所以它通常被认为是很好的编程语言设计来保持列表的简短。 (perl没有,但是perl与大多数其他编程语言有着完全不同的哲学,并且在变量之前使用特殊符号来设法防止冲突)。

无论如何,看看为什么是这种情况,考虑向前兼容性。想象一下,Python开发者决定array是一个基本的概念,他们想让它成为内置的(不是不可思议的 - 这发生在set in,um,python 2.6?)。如果内置函数被自动保留,那么之前曾使用array作为其他内容的任何人(即使明确导入为from superfastlist import array),或者实现了自己的(numpy已经这样做),他们会突然发现他们的代码不起作用,他们'非常愤怒。

(对于这个问题,考虑是否help被做了保留字 - 无数个库,包括argparse,使用help作为关键字参数)

+0

我想说的是制作向后兼容性 - Python的开创性决定并非没有历史先例。我想我会看到list(或int或dict)不是保留字,因为它是时间炸弹 - 在你花费大量时间调试某些东西之前,你不知道你犯了一个错误。我认为权衡是你获得了可用性,但是损失相对较小。 – BenDundee

相关问题