int 不是关键字,如果我们将它用作变量会怎样?

Int is not a keyword, What happens if we use it as a variable?

Int 不是 python 中的关键字,因此可以用作变量名。 我尝试将字符串分配到名称中并且成功了。

我是在 Python3.8.2

的 IDLE 中完成的
>>> a = int(4.5)
>>> print(a)
4
>>> int = 'abc'
>>> print(int)
abc
>>> b = int(5.7)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    b = int(5.7)
TypeError: 'str' object is not callable
>>> print(b)

代码在没有最后一部分的情况下也能工作。 即来自 b = int(5.7)

为什么会这样? int 不应该是关键字吗? 我们如何才能修复它,使现有代码完好无损,就像在控制台中工作一样?

我尝试使用 del 关键字,它起作用了。但我不知道为什么。

>>> del int
>>> b = int(5.7)
>>> print(b)
5

这有效。

请说明。 :)

None个基本类型是关键字,它们是类型对象

>>> type(int)
<class 'type'>

并且他们在使用时创建 class 的实例

>>> type(int('100'))
<class 'int'>

它们的工作方式与 class你自己定义的一样

>>> class Foo:
...     pass
... 
>>> type(Foo)
<class 'type'>
>>> type(Foo())
<class '__main__.Foo'>

唯一的区别是它们在 "builtins" 命名空间中,但是由于 python 的作用域规则,"builtins" 最后检查。您创建的任何变量都在内置函数之前检查的命名空间中,因此隐藏了内置函数本身。

至于为什么,python 中的几乎所有内容都是第一个 class 对象,它们都遵循相同的规则。 int 没有特殊代码或任何特殊规则(除了它的实现)——它的工作方式与任何其他 class.

相同

命名空间是分层的,主要是内置 --> 模块 --> 本地意味着本地阴影模块隐藏内置。 del 从命名空间中删除一个变量,从而删除该影子。如果您创建了一个名为 int 的变量,然后 del int,python 将不再在本地名称空间中找到它,并将回退到原始变量。

当然,如果你愿意,你总是可以在更永久的基础上把事情搞砸:

>>> __builtins__.__dict__['int'] = float
>>> int(1)
1.0