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

Tri*_*ris 4 python reserved-words built-in-types

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

# int = 1
i = 2
if type(i) == int:
    print 'Is int'
else:
    print 'Not int'
Run Code Online (Sandbox Code Playgroud)

输出为"Is int ".但是,如果我取消注释第一行,则输出将为" Not int ".显然我的"int"已经覆盖了内置类型int.也就是说,在我看来,有潜在危险.

Mar*_*ers 13

来自Python语言设计师的Python历史博客文章:

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

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

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

再次引用同一篇文章:

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

[...]

内置插件没有这样的问题.碰巧使用新内置名称作为变量或函数名称的代码将继续运行(只要您不尝试在同一函数中使用新的内置函数).虽然我们仍然试图保守引入新的内置插件,但至少我们不必担心只是在语言中添加一些内容就会破坏工作代码.