为什么Python中的数据类型不像int关键字?

时间:2014-03-27 05:05:49

标签: python

我很好奇为什么内置数据类型如int,dict和str不是关键字。例如,我可以使用int作为变量并将其分配给str。然后在评估int对象时,它就像str一样。只有在Python 3中,布尔现在才成为关键词。

当我告诉我的导师,内置数据类型不是关键词时,她说这是一种可怕的形式,我们应该假设它们是关键词。这只是Python的怪癖吗?

有人可以对此有所了解吗?

编辑:鉴于我无法添加评论,请让我更具体地说明我的关键词'。我是指keyword.kwlist中的标识符。在我发布之后,我发现了Why were True and False changed to keywords in Python 3,它给出了为什么True和False现在是关键字的原因。谢谢你的问题的答案。

3 个答案:

答案 0 :(得分:1)

Python 动态类型强类型,这意味着您不需要声明类型 - 将对象绑定到name时会扣除它们。但是类型总是被保留,并且在您明确地将不同类型的新对象重新绑定到name('variable')之前不会更改。

你所谓的'关键字'只是内置的实用程序函数,它返回一个对象,因此int()返回默认整数('0'),str()返回空字符串。因此,如果调用myvar = int(),则python首先创建新的整数对象,然后将此对象绑定到当前名称范围中的名称myvar。稍后如果您调用print myvar,它会检查名称myvar的当前范围,并将此名称引用的对象传递给print

现在,如果你出于某种原因想要创建一个名为'int'的变量,让我们说int = str,Python允许这样做。但这并不意味着您更改了int引用的名称(顺便说一句,Python不允许修改内置类型),您只是将在程序中使用的名称重新绑定到其他对象。因此,如果您稍后调用othervar = int(),则创建绑定到othervar的新空字符串,但这只会在您当前的范围内,它不会更改其他模块可以使用int()的方式,如他们有自己的名字绑定。

查看下面的代码,看看它是如何工作的:

def int_fn():
    return int()

def float_fn():
    int = float
    return int()

现在看看返回的内容:

In [26]: int()
Out[26]: 0

In [27]: float()
Out[27]: 0.0

In [28]: int_fn()
Out[28]: 0

In [29]: float_fn()
Out[29]: 0.0

现在关于你的导师所说的话。 int()str()确实不是关键字,上面的示例表明它们与其他任何名称一样。但是你应该把它们视为“保留字”,你应该避免使用它们作为名字,除非你真的,真的知道你在做什么以及你的行为会产生什么后果(这可能很难学习)。

答案 1 :(得分:0)

我猜这是因为python是动态类型的,因此不需要为每种不同的类型保留关键字。

答案 2 :(得分:0)

因为Python是Dynamically typed语言。 还有许多其他languages other then python是动态类型的。 关于Static TypingDynamic Typing here的优缺点的非常好的讨论。