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

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

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

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

编辑:鉴于我无法添加评论,让我更具体一点,我的意思是"关键字"。 我是指keyword.kwlist中的标识符。 在我发布之后,我发现为什么True和False更改为Python 3中的关键字,这给出了为什么True和False现在是关键字的原因。 谢谢你的问题的答案。

他们为什么要成为关键词?

我认为你的导师的目的是教你避免在你的代码中隐藏内置插件。

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

@TimHoffman如果没有关键字,那么import keyword; keyword.kwlist包含什么?

@hyperboreus import是一个语句,这句话中的关键字表示模块的名称等...关键字只是一个名称。由于我理解原始问题的意思,因此没有保留"关键字"的语句。

@TimHoffman我实际上指的是keyword.kwlist的内容。那是['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']。例如。 or不是声明。

实际上,这是一个类型None,语句raise和运算符or的列表,是的,它们是"关键字",但在python中没有关键字。所以我同意你的说法python中有关键字,根据文档说"以下标识符用作保留字或语言的关键字,不能用作普通标识符。"但是,例如False和True中的某些关键字可以反弹到其他位置。即False=10是有效的python但不推荐。

@TimHoffman幸运的是在Python3中,如果你尝试分配给False,你得到SyntaxError: assignment to keyword。

也是一件好事。 False = True看起来有些奇怪:-)

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()确实不是关键字,上面的示例表明它们是任何其他名称。但是你应该将它们视为"保留字",你应该避免使用它们作为名字,除非你真的,真的知道你在做什么以及你的行为会产生什么后果(这可能很难学)。

因为Python是一种动态类型语言。

除了python之外还有许多其他语言是动态类型的。

这里讨论Static Typing和Dynamic Typing的优点和缺点。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值