Python:返回元组还是列表?

2024-04-26 20:55:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个返回列表或元组的方法。在参数中表示返回类型的最python方法是什么?

def names(self, section, as_type=()):
    return type(as_type)(([m[0] for m in self.items(section)]))

Tags: 方法inself类型列表for参数return
3条回答

无论来电者想要什么,大部分时间都要返回。如果他们希望能够排序、删除或删除项目等,请使用列表。如果他们想用它作为字典键,就用元组。如果主要用途是迭代,则返回一个迭代器。如果对调用者来说这并不重要,也不会比您想象的更频繁,那么返回使代码最简单的内容。通常这是一个列表或迭代器。

不要提供将输出转换为给定类型的方法。Python已经有了一个非常简单的方法来实现这一点,任何使用您的函数的程序员都会熟悉它。看看标准的Python库。这些例行程序中有没有这样做?不,因为没有理由。

异常:有时有一种方法可以获得迭代器或列表,即使将迭代器转换为列表很容易。通常,此功能是作为两个独立的函数或方法提供的。有时您可能希望遵循这一点,特别是如果您可以使用不同的算法实现这两个备选方案,从而为需要一个或另一个的呼叫者提供一些明显的好处。

Python式的方式是根本不关心类型。返回一个元组,如果调用函数需要一个列表,那么让它对结果调用list()。反之亦然,以更合理的默认类型为准。

更好的是,让它返回一个生成器表达式:

def names(self, section):
    return (m[0] for m in self.items(section))

现在,调用者得到一个iterable,该iterable被惰性地计算。然后,他可以决定对其进行迭代:

for name in obj.names(section):
    ...

或者从头开始创建一个列表或元组-他从不需要将现有列表更改为元组,反之亦然,因此这在所有情况下都是有效的:

mylist = list(obj.names(section))
mytuple = tuple(obj.names(section))

保持简单:

def names(self, section):
    """Returns a list of names."""
    return [m[0] for m in self.items(section)]

如果调用者想要一个元组而不是一个列表,他会这样做:

names = tuple(obj.names(section))

相关问题 更多 >