python - del语句早期执行

时间:2012-02-28 22:35:49

标签: python jython

我是一名没有接受过正规培训的自学成才的程序员,如果这是一个愚蠢的问题,请提前原谅我。

在使用Python编程时,我发现了一些奇怪的东西:

from someModule import someClass

def someFunction():
    someInstance = someClass()
    print "foo"
    del someClass

someFunction()

这会立即死于未绑定的局部变量错误:

UnboundLocalError: local variable 'someClass' referenced before assignment

注释掉删除语句可以解决问题:

...
    #del someClass
...

然后它返回:

foo

所以,2个问题:

1)del语句位于函数的末尾。为什么在开头的位之前调用它?

2)为什么它给我一个“未绑定的局部变量”错误?它不应该是一个“未绑定的全局变量”错误吗?

1 个答案:

答案 0 :(得分:8)

del语句隐式地为整个函数呈现名称someClass local,所以行

someInstance = someClass()

尝试查找本地名称someClass,此时未定义。 del语句不会提前执行 - 名称从一开始就没有定义。

如果你真的想做这样的事情(提示:你没有),你必须声明名称global

def someFunction():
    global someClass
    ...
    del someClass