Int不是一个关键字,如果我们把它作为一个变量使用会发生什么?

问题描述 投票:0回答:1

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)

这段代码在没有最后一部分的情况下也能正常工作,即 from b = int(5.7)

为什么会发生这种情况?int不应该是一个关键字吗?我们如何解决这个问题,使现有的代码保持完整,就像在控制台中工作一样?

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

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

这可以工作。

请解释一下 :)

python python-3.x class variables int
1个回答
4
投票

基本类型中没有一个是关键字,它们是类型对象

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

当使用它们时,它们会创建其类的实例。

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

他们的工作就像你自己定义的班级

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

唯一不同的是,它们都在 "buildins "命名空间中,但由于python的scoping规则,"buildins "是最后检查的。你创建的任何变量都是在buildins之前检查的命名空间里,所以会对buildin本身产生阴影。

至于为什么,在python中几乎所有的东西都是一级对象,它们都遵循同样的规则。没有任何特殊的代码,也没有任何特殊的规则。int (除了它的实现)--它的工作原理和其他类一样。

命名空间是分层的,大多是 builtins --> module --> local 意思是 local 阴影模块,它阴影 builtins。del 从命名空间中删除一个变量,删除该阴影。如果你创建了一个名为 int 然后 del int,python 将不再在本地命名空间中找到它,而会回到原来的位置。

当然,如果你愿意,你可以随时把事情搞得更长久。

>>> __builtins__.__dict__['int'] = float
>>> int(1)
1.0
© www.soinside.com 2019 - 2024. All rights reserved.