2016-08-18 52 views
0

这段代码为什么会这样工作?为什么del(x)在变量名称周围带括号?

x = 3 
print(dir()) #output indicates that x is defined in the global scope 
del (x) 
print(dir()) #output indicates that x is not defined in the global scope 

我的理解是,del是一个Python关键字,而接下来del应该是一个名字。 (name)不是一个名字。为什么该示例似乎显示del (name)del name的作用相同?

+1

接下来'del'并不总是一个名字;考虑'del arr [n]'或'del obj.attr'。 – trentcl

+2

您可以在任何表达式周围放置括号,并且该值与表达式相同。例如。 'foo = x'或'foo =(x)'是同样的事情。 – Barmar

+0

'del(name)'被解释为'del(name)',并且括号被忽略。这就像在Python2.7中执行'print('name')',它被_interpreted_作为'print('name')'。 –

回答

2

del statemant的定义是:

del_stmt :: = “DEL” target_list

并从target_list定义:

target_list :: =目标( “,”target)* [“,”]
target :: =标识符 | “(”target_list“)”| “[”[target_list]“]” | ...

您可以看到围绕目标列表的括号是允许的。

例如,如果你定义x,y = 1,2所有这些都是允许的,并且具有相同的影响:

del x,y, 
del (x,y) 
del (x),[y] 
del [x,(y)] 
del ([x], (y)) 
相关问题