首页 > 解决方案 > 返回类型取决于 Python 中的输入类型

问题描述

无论输入是 a list、 anumpy.array还是 a ,Python 中的以下函数都可以返回一个列表pandas.Series

编写它以使输出类型与输入类型相同的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

标签: pythonpandaslistnumpypolymorphism

解决方案


一般来说,如果不对输入的内容做出很多假设,您就无法做到这一点

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

output = type(self)()

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

接下来,您必须将自己限制在output所有预期输入都支持的操作上。并非所有可迭代对象都支持append方法(set例如,uses add、not append),也并非所有可迭代对象都支持__getitem__(例如生成器)。这意味着您不能过多地概括您的功能。您必须始终牢记您将支持哪些类型的输入。

或者,如果您想要支持的类型集可以从列表中创建一个实例,您可以output = []静置,但在返回之前对其进行转换:

return type(self)(output)

推荐阅读