繁体   English   中英

在 Python 中传递指向列表的指针

[英]Passing a pointer to a list in Python

有什么方法可以将指针传递给列表,这样我就可以拥有update_list(list, data)

而不是必须做list = update_list(list, data)

与这是否可能无关,在这种情况下什么是可取的和 Pythonic 的?

我建议从 C++ 的角度阅读Python 变量名称的语义

所有变量都是引用

这是对整篇文章的过度简化,但这(以及对list可变类型的理解)应该可以帮助您理解以下示例的工作原理。

In [5]: def update_list(lst, data):
   ...:     for datum in data:
   ...:         lst.append(datum)
   ...:         

In [6]: l = [1, 2, 3]

In [7]: update_list(l, [4, 5, 6])

In [8]: l
Out[8]: [1, 2, 3, 4, 5, 6]

你甚至可以通过使用 extend() 方法来缩短它:

In [9]: def update_list(lst, data):
   ...:     lst.extend(data)
   ...:       

这实际上可能消除了对您功能的需求。

注意: list是内置的,因此对于变量名来说是一个糟糕的选择。

您不在 Python 中传递指针。 只需分配给整个列表的切片

def update_list(list, data):
    list[:] = newlist

当然,只要确保使用正确的变量名( list是一种类型):

>>> def update_list(lst):
...   lst.append('hello')
... 
>>> a = []
>>> update_list(a)
>>> a
['hello']
>>>

我不喜欢就地修改东西,实际上我更喜欢第二种方法而不是第一种方法。

除了考虑到list是可变的并且您可以在其他函数中就地修改它之外,正如其他答案已经指出的那样; 如果您正在编写许多update_list方法,您必须考虑正在存储的数据是否不是真正的列表,而是适合您作为面向对象方法的一部分创建的模型的其他内容。

如果是这种情况,那么一定要创建自己的类和方法,以提供对象内部状态所需的接口:

class MyList(list):
    def update(self, data):
        # Whatever you need to update your data

...

my_list = MyList()
my_list.update(data)

这个 StackOverflow 问题和随后接受的回复将指导您朝着正确的方向了解 Python 处理传入值的 Pythonic 方式。

一般来说,更新列表的 Pythonic 方法是编写/调用update_list(list, data)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM