1

我有一个包含整数和字符串的列表,l = [1, 2, 'a', 'b']并且想编写一个函数来获取列表并以之后只包含整数的方式对其进行操作。函数输出看起来像我想要的,但它不会改变“原始”列表。

def filter_list(l):
  temp =[]
  for item in l:
      if type(item) == int:
          temp.append(item)
  l = temp
  return l
Function output: [1, 2]
Variable explorer: [1,2,'a','b']

相比之下,函数

def manipulate(l):
    l.append("a")
    return l
Function output: [1, 2, 'a', 'b', 'a']
Variable explorer: [1, 2, 'a', 'b', 'a']

更改“原始”列表。

  1. 论文 2 函数有什么区别,即为什么
    第二个函数操纵我的“原始”列表,而第一个函数却没有?
  2. 我如何调整功能 1 以获得所需的输出?

谢谢!

4

1 回答 1

0

在 python 中,所有对象都通过引用传递给函数,这意味着您可以更改传递给函数的对象。这就是为什么当您append在第二个示例中调用该方法时,列表会发生变化。

但是,如果您将不同的对象分配给传递的参数 ( l = temp),那么您会更改引用本身,因此无法从外部范围更改原始对象。不过,在您的情况下这不是问题,因为您返回了新的引用,在这种情况下您应该这样做。

于 2020-03-02T15:41:32.553 回答