Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以将finally语句与def语句一起使用吗?_Python - Fatal编程技术网

Python 我可以将finally语句与def语句一起使用吗?

Python 我可以将finally语句与def语句一起使用吗?,python,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中),还有删除文件和类似内容 帮助我实现这一目

我正在创建一个程序,我想知道,有没有办法将
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

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

def test(a, b, c):
    try:
        return a + b + c
    finally:
        pass # do whatever you want
但当正则变量超出范围时,它们可能会被遗忘。使用类似文件的资源,您可以:


当你谈论删除时,你应该问自己从何处删除?任何python对象都存在于名称空间(全局、本地、内置等)中,在这种情况下,函数中的变量位于本地名称空间中,如果不想在函数中使用它们,则不需要删除它们,只需删除函数即可

但是,如果您在全局命名空间中定义了变量,那么删除函数中的变量不会在全局命名空间中删除它们,您可以在调用函数后删除它们

例如:

>>> 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
定义a(x,y): ... 返回x,y ... >>>a(3,4) (3, 4) >>>德拉 >>>a 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 NameError:未定义名称“a” 如果在函数外定义了变量:

>>> 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
>x,y=3,9
>>>定义a(x,y):
...   德尔x,y
...   打印x
... 
>>>a(x,y)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第3行,在
UnboundLocalError:赋值前引用了局部变量“x”
>>>x
3.

1。不,没有;二,。“删除函数中的变量”是什么意思?你到底想要实现什么?!您不能将
finally
def
一起使用。此外,您不需要删除变量(我想您这样做是为了释放内存?)Python有垃圾收集器。@sobolevn有
del
的用法,但这不是其中之一。在本例中,变量自动超出范围。如果没有发生这种情况,您可能希望使用
del
从范围中删除绑定(这并不一定意味着删除对象)。例如,如果您不再希望
x
成为全局变量,您将使用
del
(可能名为
x
的对象会被销毁)。
>>> 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