为什么“del”是一个语句而不是 Python 中的内置函数?

jil*_*ulu 3 python python-3.x

在 Python3 中,del是一个像del x. 为什么del不设计成内置函数使用之类的del(x)

Mis*_*agi 6

TLDR:这是使用-提及区别的结果。函数不能对符号 进行操作x


语句和函数之间的重要区别是语句可以对符号起作用,而函数只能对起作用。

考虑一个假设的delete函数草案:

>>> def delete(*targets):
...     print("Deleting", targets, "[TODO: implement actual deletion]")
...
>>> x = "the value of x"
>>> delete(x)
Deleting ('the value of x',) [TODO: implement actual deletion]
Run Code Online (Sandbox Code Playgroud)

通过在函数调用中使用x(或属性x.y、下标x[y]或切片x[y:z]),它会自动评估为其值。该函数只接收值,而不是符号,甚至不是其作用域中的符号——因此函数无法从其作用域中删除符号,因为它两者都不知道。


Python没有引用表达式的概念,所以没有办法表达“符号x”。可以使用字符串来包含符号名称,例如使用delattr(x, 'y')代替del x.y,但不使用符号上下文——假设delattr('x.y')是行不通的,因为它不知道初始x的作用域。

只有内置在语法中的东西才能引用符号及其上下文。这意味着del必须至少是一个内置语句或表达式。与操作相同目标的赋值语句并行的del是一个语句。