对这个返回 Python 感到困惑

时间:2020-12-29 18:17:31

标签: python return

def get_thing(item, obj):
  for i in range(item):
    obj.append(i)
  return obj
    
def main():
  thing = []
  get_thing(5, thing)
  print(thing)

main()

我希望返回以下代码

[]

而不是

[0,1,2,3,4]

它的工作方式似乎与我这样做的方式相同。

thing = get_thing(5, thing)

导致这种回报的后台进程是什么?我在工作中的代码中多次注意到这一点,并对此感到有些困惑,不太确定这是如何工作的。

1 个答案:

答案 0 :(得分:0)

长话短说,是因为您将可变对象作为参数传递给函数调用。

这样做: 注意这仅作为演示目的

def get_thing(num, lst):

    if not lst:
        lst = []
    for n in range(num):
        lst.append(n)
    print(lst) # [0, 1, 2, 3, 4]
    return lst


def main():
    thing = None
    get_thing(5, thing)
    print(thing) # None


main()

您可以看到它按您的预期工作。

堆栈溢出相关

文档