返回类型取决于Python中的输入类型

时间:2020-02-18 14:21:11

标签: python pandas list numpy polymorphism

无论输入是listnumpy.array还是pandas.Series,Python中的以下函数都可以返回列表。

写它的pythonic方法是什么,以使输出类型与输入类型相同?

def foo(input):
    output = []

    output.append(input[0])

    for i in range(1, len(input)-1):
        if (some condition):
            output.append(input[i])

    output.append(input[-1])

    return output

1 个答案:

答案 0 :(得分:1)

通常,如果不对输入是什么做很多假设,就无法做到这一点。

第一步是确保output是正确的类型,而不是列表。

output = type(self)()

但是,这假设您输入的是什么类型,都可以通过不带参数的调用来创建实例。

接下来,您必须将自己限制在所有预期输入都支持的对output的操作上。并非所有可迭代对象都支持append方法(例如,set使用add,而不是append),也不是所有可迭代对象都支持__getitem__(生成器,例如)。这意味着您不能过多地泛化函数 ;您必须始终牢记您将支持的输入类型。

或者,如果要支持的一组类型可以从列表中创建实例,则可以让output = []站立,但在返回之前将其转换:

return type(self)(output)