Копировать в новую переменную в лямбду - PullRequest
0 голосов
/ 02 февраля 2020

Можно ли сделать что-то подобное в функции python lambda? Если да, то как можно добиться чего-то подобного?

def modify(**kwargs):
    from copy import deepcopy
    new_kwargs = deepcopy(kwargs)
    new_kwargs['x'] = new_kwargs['x'] * 2
    return new_kwargs

Ответы [ 2 ]

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

Используя выражение присваивания Python 3.8, вы можете выполнить sh эквивалентный полусмысленно:

>>> from copy import deepcopy
>>> modify = lambda **kwargs: dict(new_kwargs := deepcopy(kwargs), x=new_kwargs['x']*2)
>>> modify(x=4)
{'x': 8}

Однако это создает дополнительную поверхностную копию без веской причины. Это также не очень читабельно.

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

0 голосов
/ 02 февраля 2020

Вы можете просто создать новый dict и вернуть его, не называя его. Например:

>>> modify = lambda **kwargs: dict(kwargs, **{'x':kwargs['x']*2})
>>> modify(x=4)
# {'x': 8}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...