【问题标题】:Python function directly altering list, not returning itPython函数直接改变列表,不返回它
【发布时间】:2013-11-13 05:26:55
【问题描述】:

[已解决]

所以代码如下:

>>> 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] 

【问题讨论】:

  • 您是在问为什么允许这种情况发生,还是想知道如何编写一个函数来实现这一点?不清楚。

标签: python function


【解决方案1】:

列表是可变的,所以你需要做的就是在函数中改变列表。

def my_func(l):
  del l[:]

【讨论】:

    【解决方案2】:

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

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

    如果您忘记您正在直接使用相关对象,这可能会导致意外副作用。

    【讨论】:

    • 不,如果你在你的函数中使用a = []a 现在指的是一个 不同 的对象,而不是传递给函数的对象。这不会产生 OP 想要的效果。
    【解决方案3】:

    如果标识符是固定的,那么您可以使用global 关键字:

    a = [1,2,3]
    
    def my_func():
        global a
        a = []
    

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

    a = [1,2,3]
    
    def my_func(a):
        a.clear()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多