【问题标题】:How to assign a new list to a list passed as an argument?如何将新列表分配给作为参数传递的列表?
【发布时间】:2018-09-26 16:44:26
【问题描述】:

我正在为需要获取列表的函数实现 API,通过一些修改对其进行复制,然后将 out 参数设置为副本。即该函数不返回任何内容,但必须更改作为参数传入的列表对象。

类似这样的:

l = [1,2,3]

def f(passed_in_list):
   different_list = [4,5,6]
   passed_in_list = different_list[:]

print(l)   # Prints [1,2,3]. How to make it [4,5,6] ?

我怎样才能做到这一点?

【问题讨论】:

  • passed_in_list[:] = [4, 5, 6]
  • 你永远不会调用你的函数......
  • @khachik 哦哈哈,我试过了,但正如 rahlf23 指出的那样,我没有调用该函数。非常感谢你。如果你写了一个答案,我会接受(如果在此之前问题没有被关闭)

标签: python list reference


【解决方案1】:

这让我觉得这是一种危险的设计模式,它创建了一个对全局范围有故意副作用的函数。我会小心地做这样的事情。话虽如此,您似乎没有调用您的函数,这可能是您没有看到预期结果的原因。

【讨论】:

  • 我同意,我希望函数返回一个新列表,然后您执行 l = f(l) 将新列表重新分配给变量 l
【解决方案2】:

您需要修改列表,而不是指向它的变量。正如其他人所提到的,您需要调用该函数:

l = [1,2,3]


def f(passed_in_list):
   different_list = [4,5,6]
   passed_in_list[:] = different_list[:]


f(l)
print(l)

【讨论】:

  • @vash_the_stampede 是的,因为passed_in_list[:] = 更新passed_in_list 参数
【解决方案3】:

你需要实际调用你的函数:

l = [1,2,3]

def f(passed_in_list):

   passed_in_list[:] = [4,5,6]

f(l)

print(l)

产量:

[4, 5, 6]

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 2013-11-06
    • 2018-06-03
    • 2021-06-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多