在为变量定义内容时,对于内容是什么?

Jac*_*IRR 3 python cpython python-3.x

如果有人使用内置的python作为变量,删除该变量似乎将该术语的定义恢复为原始定义.例如:

set = 1
print(set)
del set
a = set([1,2,3])
print(a)
Run Code Online (Sandbox Code Playgroud)

结果:

1
{1, 2, 3}
Run Code Online (Sandbox Code Playgroud)

但是,当您从头开始删除内置函数时,不再定义它:

del set
a = set([1,2,3])
print(a)
Run Code Online (Sandbox Code Playgroud)

结果: NameError: name 'set' is not defined

我理解使用内置函数作为变量是不好的做法,但我对这个设计决策感到好奇:

如果python源代码可以通过将删除的变量分配给它们的原始内置值来智能地恢复它们,为什么代码允许在我的第二个示例中删除内置函数?允许删除内置函数有什么可能的效用?

不,我没有现实世界的用例; 我只是想了解设计决定.

use*_*ica 5

您在第二个示例中获得的NameError不是set在删除后尝试使用; NameError来自尝试删除set.

del some_variable尝试some_variable在当前命名空间中取消绑定.在函数或类之外,这意味着当前模块的模块全局变量.内置set命名空间中的内置绑定,可通过builtins模块访问; del set不会删除.

由于del set无法找到set解除绑定的变量,因此会抛出NameError.