为什么Python内置类型名称不是保留关键字?

时间:2015-05-29 08:54:00

标签: python reserved-words built-in-types

换句话说,为什么Python允许与内置类型名称相同的变量名称,如int,float,list等? (相比之下,C ++内置类型名称都是保留的)。考虑一下这个例子

   -O1 Optimize.  Optimizing compilation takes somewhat more time, and a lot more memory for a large function. 
   With -O, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation time.

输出"是int "。但是,如果我取消注释第一行,则输出将为" Not int "。显然我的" int"已重写内置类型int。就我而言,这是有潜在危险的。

2 个答案:

答案 0 :(得分:12)

来自blog post on the History of Python by the Python language designer

  

因为你不能在任何Python程序中的任何地方使用这些作为变量或函数名称,所以使用Python的每个人都必须知道语言中的所有保留字,即使他们不需要它们。出于这个原因,我们尝试保留保留字列表,并且在向该语言添加新的保留字之前,核心开发人员会出现很多问题。

内置名称只是系统提供的对象,具有预定义值的变量。您可以逐个模块或逐个函数地重新定义它们。使这个(而不是列表)的名称保留关键字将违背上述原则。

使内置类型和函数保留关键字也会使非常难将任何新名称引入该列表。添加到保留关键字列表会对前向兼容性产生严重后果。想象一下,在语言中添加color类型;编写处理图像的每一段代码都需要重新编写,以避免使用新的关键字。

再次从同一篇文章中引用:

  

[W]如果我们决定添加一个新关键字,我们会在引入新关键字之前至少启动一个弃用广告系列,警告开发人员为其变量选择不同的名称。

     

[...]

     

对于内置插件没有这样的顾虑。 恰好使用新内置名称作为变量或函数名称的代码将继续运行(只要您不尝试在同一函数中使用新的内置函数) 即可。虽然我们仍然试图保守引入新的内置插件,但至少我们不必担心只是在语言中添加一些东西来破坏工作代码。

答案 1 :(得分:1)

These是所有保留的关键字。

在解析python代码时,Python解释器使用许多技术来识别用户想要做什么 - 可以包括行连接,例如,如果代码包含这样的内容:

my_list = [1,
           2,
           3]

一般来说,Lexical Analysis:关键字帮助Python解释器理解程序员,由他按照规则进行游戏。你不会(并且不能)命名变量for,因为当Python解释器读取该词时 - 它理解涉及某个循环,class相同(用于类声明)和所有关键字相同(它们都在我们的程序中执行特定的角色)。

为什么内置类型不是保留字?因为这不是Python解释器的工作原理,所以在理解你并在某个时刻为变量赋值时没有任何问题。

可以找到更多信息(除了给出的链接)here