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
这可以工作。
请解释一下 :)
基本类型中没有一个是关键字,它们是类型对象
>>> 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