清除函数之外的数据(list / dict / tuple)

时间:2013-06-29 00:46:04

标签: python function variables

我正在编写程序,在循环存储在变量中的某些特定数据后,我不再需要它。但是,我想重用该变量以便稍后在程序中使用。我不确定这是否是最佳方式,但似乎摆脱了不再需要的数据,重用变量可以使代码更清晰,使用更少的资源。

示例:

  data = [#Lots and lots of data]

  def loopThroughdata(data):
     #here I loop through data and extract what I need
     #Finally, I'd like to reset the data variable to empty
     data = []

我已尝试重置数据变量,如上例所示,但它似乎无法正常工作。我错过了为什么这不可能,或者我做错了什么?

2 个答案:

答案 0 :(得分:2)

函数的第一行应为global data,表示您在函数中使用的数据变量是您已全局声明的数据变量。

答案 1 :(得分:0)

这不起作用的原因是你在这里有两个不同的变量。在函数内部,当你说

data = []

您正在将参数 data更改为新的空列表,但您根本不会更改全局变量data

奇怪的是,即使这里有两个变量,每个变量的值实际上是对包含列表元素的存储的引用。您可以通过说

来清空此存储空间
data[:] = []

这将使全局data为空。

示例:

>>> data = [1,2,3]
>>> def something(data):
...     print data
...     data[:] = []
... 
>>> print data
[1, 2, 3]
>>> something(data)
[1, 2, 3]
>>> data
[]

这与在Python中一切都是按值传递,但对象的“值”是对象的引用这一想法有关。

至于你是否“清空”列表和“重用”变量用于以后的其他用途,这听起来有点奇怪,但我想这取决于你想要做什么。