如果有人使用内置的python作为变量,删除该变量似乎会将该术语的定义恢复为原始定义。例如:
set = 1
print(set)
del set
a = set([1,2,3])
print(a)
结果:
1
{1, 2, 3}
但是,当您从头开始删除内置时,不再定义它:
del set
a = set([1,2,3])
print(a)
结果:
NameError: name 'set' is not defined
我理解使用内置函数作为变量是不好的做法,但我对此设计决策感到好奇:
如果python源代码可以通过将删除的变量分配给原始内置值来智能地恢复它们,为什么代码允许在我的第二个示例中删除内置函数?允许删除内置函数有什么可能的效用?
不,我没有现实世界的用例;我只是想了解设计决定。
答案 0 :(得分:5)
您在第二个示例中遇到的NameError在删除后不会尝试使用set
; NameError来自尝试删除set
。
del some_variable
尝试取消绑定当前命名空间中的some_variable
。在函数或类之外,这意味着当前模块的模块全局变量。 set
的内置绑定存在于内置命名空间中,可通过builtins
模块访问; del set
无法删除该内容。
由于del set
无法找到要取消绑定的set
变量,因此会抛出NameError。