【问题标题】:Return type dependent on input type in Python返回类型取决于 Python 中的输入类型
【发布时间】:2020-06-02 14:23:04
【问题描述】:

无论输入是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

【问题讨论】:

  • 应该已经有了?你能举一个这不起作用的例子吗?
  • 最快的修复方法是return type(input)(output),假设该类型实际上可以构造一个给定值列表的实例。如果没有,您必须了解input 可以具有哪些类型,并将您的函数写入最低公分母,仅使用已知可与它们中的任何一个一起使用的函数。
  • @Raphael 无论输入是什么类型,该函数都会返回一个list
  • @chepner 哦,我假设输入也是一个列表。我以为他们的意思是输入和输出列表的元素应该是相同的类型。

标签: python pandas list numpy polymorphism


【解决方案1】:

一般来说,如果不对输入是什么做很多假设,你就无法做到这一点。

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

output = type(self)()

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

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

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

return type(self)(output)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2023-04-04
    • 2019-10-29
    • 2022-01-09
    • 2019-02-25
    • 2022-11-17
    • 2020-05-02
    • 2021-07-18
    相关资源
    最近更新 更多