2014-03-27 75 views
-1

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

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

任何人都可以对此有所了解吗?

编辑:鉴于我不能添加评论,让我更具体一点,我的意思是'关键字'。我的意思是关键字.kwlist中的标识符。我发布后,我发现Why were True and False changed to keywords in Python 3这给出了一些原因,为什么真和假现在是关键字。感谢我的问题的答案。

+0

他们为什么要成为关键字? –

+0

我认为你的教师的意图是教你避免在你的代码中嵌入阴影。 –

+0

python中没有关键字,只是声明。 'int'不是一个声明,它是一个名称(设计)被默认绑定到int类型。所有名字都可以反弹到其他对象。 –

回答

0

我想这是因为python是动态类型的,所以它不需要为每个不同类型保留关键字。

1

Python是动态类型强类型,这意味着你不需要申报类型 - 当您绑定对象的名字,他们被扣除。但是类型总是被保留下来,直到你将不同类型的新对象重新绑定到名称('变量')之后才会更改。

你所说的'关键字'只是内置的实用函数,它返回一个对象,所以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()确实不是关键字,上面的示例显示它们是任何其他名称。但是,除非你真的,真的知道自己在做什么以及你的行为会产生什么后果(并且可能很难学习),否则你应该把它们当作'保留字'来对待。

相关问题