Тип возврата зависит от типа ввода в Python - PullRequest
1 голос
/ 18 февраля 2020

Следующая функция в Python может возвращать список, независимо от того, является ли ввод list, numpy.array или pandas.Series.

Что такое Pythoni c способ напишите так, чтобы тип вывода совпадал с типом ввода?

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 Ответ

1 голос
/ 18 февраля 2020

В общем, вы не можете сделать это, не сделав много предположений о том, что ввод равен .

Первым шагом было бы убедиться, что output является правильный тип, а не список.

output = type(self)()

Однако это предполагает, что независимо от типа вашего ввода вы можете создать экземпляр, вызвав его без аргументов.

Далее вы должны ограничьте себя операциями на output, которые поддерживаются всеми ожидаемыми входными данными. Не все итерируемые элементы поддерживают метод append (например, set использует add, а не append), и не все итерируемые элементы поддерживают __getitem__ (например, генератор). Это означает, что вы не можете обобщать свою функцию слишком ; Вы всегда должны помнить, какие типы ввода вы будете поддерживать.

В качестве альтернативы, если набор типов, которые вы хотите поддерживать, может создать экземпляр из списка, вы можете оставить output = [] стоять, но конвертировать это как раз перед возвращением:

return type(self)(output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...