Is it considered better practice in Python to pass tuples instead of lists to functions?
在Python中,如果传递的数据应该是未修改的,那么编写接受元组而不是列表的函数是更好的做法吗?与在C++中通过const引用传递参数类似,它向用户清楚地表明数据不会被修改。
- 1。你打算怎么执行?2。tuple中的数据在函数内部仍然可以修改,所以我看不到def foo(data): ; data[0][0] = 1 ; print(data) ; foo(([0], 1)) ; # ([1], 1)点。
- 不。通常元组用于具有结构的事物,而列表用于具有顺序的事物。
- 您的函数通常不应该关心它是否得到元组或列表。哦,除非你需要可变,否则使用元组是个好主意。此外,列表一般不应用于非均匀数据,或对项目位置有特殊意义的集合,例如(纬度、经度、高度)应是元组。因此,如果对集合进行排序或重新排序没有意义,那么它可能是一个元组。
- @pm2ring "it's a good idea to use tuples unless you need mutability"元组不会保护任意对象不被修改。
- @深水空间我并没有打算暗示他们会这样做。元组本身是不可变的,但是它可能包含可变的项,并且没有什么可以阻止这些项发生变化。
- @PM2正确,但OP要求的唯一目的是不可变。
- Ren&233;Pijl答案中的链接是否充分解决了您的问题?如果是这样的话,我们可以把这个问题作为那个问题的副本来结束。
- @PM2RING,它并不能准确回答我的问题,但我认为它已经足够接近了,一旦我在下面评论中的后续问题得到解决,它就可以关闭了。如果它能被标为副本,我就让你当法官。
不,元组和列表是不同的东西。元组有结构,列表有顺序。各有各的用途。
- 好吧,所以我觉得这可以澄清一些事情。考虑到这一点,元组应该表示异构数据,并且列表是同构的,有没有一种广泛接受的方式向用户广播传递列表中的信息(例如,柱状图的bin边缘)将保持不变?
- @马修菲克特不完全是。但是,这是一个Python约定,函数没有副作用,如果一个函数可以修改其可变参数,那么该函数的文档(希望是其名称)应该清楚地说明这一点。在一个相关的注释中,对于修改它们的列表(或其他可变的)arg就地返回None的函数来说,这是常规的。当然,拥有一个(比如)接受一个列表而不修改它的函数是合法的,但是仍然返回None(例如,它可以将列表保存到磁盘上,绘制它等等),但是在那些情况下,我倾向于返回某种成功指标。
- @谢谢你的总结。我想现在可以关门了。