Функция высшего порядка от старой версии Python до Python 3 - PullRequest
0 голосов
/ 03 февраля 2019

Кто-нибудь знает, как перевести этот HOF из предыдущей версии Python в Python 3?

apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))

Это происходит из книги Дэвида Мерца «Обработка текста в Python».Я не могу использовать функцию apply в Python 3, так как она устарела.Я пытался использовать func (* args, ** kwargs) вместо apply (func, args, kwargs), но я получаю этот TypeError: объект 'float' не повторяется.Я также нашел те заметки, которые показывают, что функция должна возвращать: https://wiki.python.org/moin/TextProcessingInPython

вот моя попытка кода:

apply_each = lambda fns, args=[]: map(fns, *args)
args = [5.4, 6.3, 6.3]
print(list(apply_each(approx, args)))

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете определить свой собственный .apply:

>>> def apply(f, args):
...     return f(*args)
...
>>> apply_each = lambda fns, args=[]: map(apply, fns, [args]*len(fns))

Или все сразу:

apply_each = lambda fns, args=[]: map(lambda f, args: f(*args), fns, [args]*len(fns))

Но это плохой стиль, единственным преимуществом лямбды является то, чтоэто анонимно, если вы собираетесь присвоить его имени, которое побеждает цель.Это лучший стиль:

def apply(f, args):
    return f(*args)

def apply_each(fns, args=()):
    return map(apply, fns, [args]*len(fns))

Итак:

>>> import operator as op
>>> list(apply_each([op.add, op.sub, op.mul, op.truediv], args=[1,2]))
[3, -1, 2, 0.5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...