在 Python3 中,del是一个像del x. 为什么del不设计成内置函数使用之类的del(x)?
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是一个语句。
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |