Python函数直接改变列表,而不是返回它

时间:2013-11-01 22:32:35

标签: python function

[解决]

所以代码如下:

>>> a = [1,3,2]
>>> my_func(a)
>>> a == []
True

my_func在不返回列表的情况下更改列表。我知道如何使用指针在C中执行此操作,但实际上对python解决方案感到困惑。

提前致谢!!

编辑:所以我正在做一个基数排序,它有一个辅助函数,辅助函数返回排序列表。我希望main函数改变原始列表而不是返回它:

def radix(a):
    base = ...
    temp = radix_helper(a, index, base)
    a[:] = []
    a.extend(temp)

所以它会以:

运行
>>> a = [1,3,4,2]
>>> radix(a)
>>> a
[1,2,3,4] 

3 个答案:

答案 0 :(得分:2)

列表是可变的,因此您需要做的就是改变函数中的列表。

def my_func(l):
  del l[:]

答案 1 :(得分:1)

Python按值传递参数,但a的值是对列表对象的引用。您可以在函数中修改该列表对象:

def my_func(a):
    a.append('foobar')

如果您忘记直接使用相关对象,这可能是造成意外副作用的原因。

答案 2 :(得分:0)

如果标识符已修复,则可以使用global关键字:

a = [1,2,3]

def my_func():
    global a
    a = []

否则你可以直接修改参数:

a = [1,2,3]

def my_func(a):
    a.clear()