我可以使用带有def语句的finally语句吗?

时间:2015-08-02 11:38:49

标签: python

我正在创建一个程序,我想知道,有finally语句可以使用def吗?例如:

# NOT WORKING
def test(a,b,c):
    return a+b+c
finally:
    del a,b,c

x = test(4,5,6)

所以我可以在函数中return之后删除函数中的变量,还是在调用函数后需要删除变量?

编辑:这是变量的愚蠢的例子,但我想要实现不仅删除变量(因为我认为它一直留在RAM中直到删除),而且还删除文件和类似的。

帮助我的代码是:

def test(a, b, c):
    try:
        return a + b + c
    finally:
        pass # do whatever you want

2 个答案:

答案 0 :(得分:2)

您不需要删除python中的变量。我不确定你是来自某种奇怪的语言,还是在问一些不同的东西。但是有一种方法可以通过在函数中放置try来实现你想要的东西:

def test(a, b, c):
    try:
        return a + b + c
    finally:
        pass # do whatever you want

但是当常规变量超出范围时,它们可能会被遗忘。使用文件等资源,您需要use with instead

with open('blah.txt', 'rb') as f:
    pass

答案 1 :(得分:1)

当你在谈论删除时,你应该问自己从哪里删除?任何python对象都存在于命名空间中(全局,本地,内置,......),在这种情况下,函数内部的变量位于本地命名空间中,如果你不想在函数内使用它们#39; t需要删除它们,你只需删除你的功能。

但是如果你在全局命名空间中定义了变量,删除函数内部的变量并没有在全局命名空间中删除它们,你可以在调用函数后删除它们。

示例:

>>> def a(x,y):
...   return x,y
... 
>>> a(3,4)
(3, 4)
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

如果你在函数之外定义了变量:

>>> x,y=3,9
>>> def a(x,y):
...   del x,y
...   print x
... 
>>> a(x,y)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in a
UnboundLocalError: local variable 'x' referenced before assignment
>>> x
3