Преобразование конкатенации строк с помощью лямбды в f строк - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь обдумать расширенное использование строк f в Python 3, и я не могу понять, как их использовать с лямбда-функциями.Например, если у вас есть конкатенация строк, которая использует лямбду для определения некоторых значений в строке, как вы собираетесь использовать f строк?Тем более, когда одно из значений использует функцию if для определения значения.

Например, я пробовал следующее:

        cmd_out = reduce(lambda acc, x: f'{acc} -v {x["Source"]}:{x["Destination"]}'
                         f'{(":ro" if not x["RW"] is True else " ")} {mounts}')

Но это не работает.

Это оригинал с конкатенацией.

cmd_out = reduce(lambda acc,x: acc + "-v " + x["Source"] + ":" + x["Destination"]+ (":ro" if not x["RW"] is True else "") + " ", mounts, "")

Поэтому вместо использования конкататации я хотел бы иметь возможность использовать f строк для упрощения процесса и уменьшения количества ошибок.Есть мысли?

1 Ответ

0 голосов
/ 19 сентября 2019

Вы пытаетесь включить mounts в лямбда-выражение, но это то, что reduce должно повторяться.Я бы не стал использовать reduce здесь;вместо этого используйте метод join.

cmd_out = " ".join(f'-v {x["Source"]}:{x["Destination"]}{"" if x["RW"] else ":ro"}'
                   for x in mounts)
...