2016-02-19 2 views
0

Мой вопрос связан с тем, как определить необязательный параметр, который может быть разных типов (полиморфный).Как определить полиморфный необязательный параметр python?

Я пытался определить обертку вокруг functools.reduce в python 3.x и заметил, что существует необязательный параметр ,[initializer]. Я попытался определить один и тот же необязательный параметр, но не знаю, как это сделать. Search around показывает, что я могу вообще сделать что-то вроде:

def info(object, spacing=10, collapse=1): 

Но в этом контексте initializer может быть много различных типов с различными значениями по умолчанию. Например, это может быть 0 для добавления (как функция уменьшения) и "" (пустая строка) для конкатенации строк. Как определить этот параметр?

+0

Это не редкость (но в целом не рекомендуется) ожидать и обрабатывать различные типы аргументов в Python, например. 'if type (var) - str: do_stuff'. – leongold

+0

'Это не редкость (но обычно не рекомендуется) ожидать и обрабатывать различные типы аргументов в Python' @ zamuz. Но это стандартная функция библиотеки python (сокращение). – tinlyx

+0

не могли бы вы прояснить, чего вы пытаетесь достичь? Тип параметра определяется во время выполнения (т. Е. Вы никогда не определяете тип параметра). Было бы полезно увидеть фактический результат по сравнению с ожидаемым – ProfHase85

ответ

1

А как насчет просто?

def reduce_wrapper(custom_param, function, iterable, *args): 
    # do stuff 
    reduce(function, iterable, *args) 
+0

Спасибо. Я попробовал это, например: 'def reduce_ (f, xs, init = None): return functools.reduce (f, xs, init)' then 'reduce_ ((lambda x, y: x + y), [1,2 , 3]) '. Но я получил: 'TypeError: неподдерживаемый тип операндов для +: 'NoneType' и 'int'' – tinlyx

+0

извините за это. В документации есть несоответствие. Кажется, что инициализатор - простой позиционный аргумент – ProfHase85

+0

Спасибо. Это хорошо работает. Однако все еще любопытно, как позиционный аргумент решил проблему, о которой идет речь, в 'functools.reduce'. – tinlyx

Смежные вопросы