Python 将具有lambda的字符串串联转换为f字符串

Python 将具有lambda的字符串串联转换为f字符串,python,python-3.x,lambda,concatenation,f-string,Python,Python 3.x,Lambda,Concatenation,F String,我正试图了解Python 3中f字符串的高级用法,但我似乎无法理解它们在lambda函数中的用法。例如,当您有使用lambda定义字符串中某些值的字符串连接时,如何使用f字符串?当其中一个值使用if函数定义该值时,情况更是如此 例如,我尝试了以下方法: cmd_out=reduce(lambda acc,x:f'{acc}-v{x[“Source”]}:{x[“Destination”]} f'{(“:ro”如果不是x[“RW”]则为True,否则为“”)}{mounts}') 但这不起作用

我正试图了解Python 3中f字符串的高级用法,但我似乎无法理解它们在lambda函数中的用法。例如,当您有使用lambda定义字符串中某些值的字符串连接时,如何使用f字符串?当其中一个值使用if函数定义该值时,情况更是如此

例如,我尝试了以下方法:

cmd_out=reduce(lambda acc,x:f'{acc}-v{x[“Source”]}:{x[“Destination”]}
f'{(“:ro”如果不是x[“RW”]则为True,否则为“”)}{mounts}')
但这不起作用

这是带有连接的原始文件

cmd_out=reduce(lambda acc,x:acc+“-v”+x[“源”]+”:“+x[“目标”]+(“:ro”如果不是x[“RW”]则为True,否则为“”)+”,则为“”)

因此,与使用concatation相比,我希望能够使用f字符串来简化过程并减少错误。有什么想法吗?

您正试图在lambda表达式中包含
装载
,但这正是
reduce
应该迭代的内容。我不会在这里使用
reduce
;改用
join
方法

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

您正试图在lambda表达式中包含
mounts
,但这正是
reduce
应该迭代的内容。我不会在这里使用
reduce
;改用
join
方法

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

好的,但是您已经删除了
acc
,它也是一个变量,所以我这里的输出缺少这个变量。我和我使用lambda得到了这个值,这个表单不再需要它。除非我误解了,否则我会删除
.join
并继续使用
lambda
来修复你的代码:
cmd_out=reduce(lambda acc,x:f'{acc}-v{x[“Source”]}:{x[“Destination”]}{(“if x[“RW”]else:ro”)},mounts,”
“fixed”不是我会使用的词。您基本上是使用
reduce
来重新实现
join
。使用
join
而不是
reduce
lambda
的问题是,我最终在输出
acc
中缺少了一个关键变量
join
不允许使用它。
acc
只是
reduce
从一个迭代到下一个迭代的累积输出
join
不需要它,因为它一次组合了所有段。比较
“”。将(x代表x在[“1”、“2”、“3”])
reduce(lambda acc,x:acc+x+”,[“1”、“2”、“3”],”)连接起来。
;唯一的区别是
reduce
生成一个尾随空格,您不关心或需要删除它。好的,但是您删除了
acc
,它也是一个变量,因此我在这里的输出缺少该变量。我和我使用lambda得到了这个值,这个表单不再需要它。除非我误解了,否则我会删除
.join
并继续使用
lambda
来修复你的代码:
cmd_out=reduce(lambda acc,x:f'{acc}-v{x[“Source”]}:{x[“Destination”]}{(“if x[“RW”]else:ro”)},mounts,”
“fixed”不是我会使用的词。您基本上是使用
reduce
来重新实现
join
。使用
join
而不是
reduce
lambda
的问题是,我最终在输出
acc
中缺少了一个关键变量
join
不允许使用它。
acc
只是
reduce
从一个迭代到下一个迭代的累积输出
join
不需要它,因为它一次组合了所有段。比较
“”。将(x代表x在[“1”、“2”、“3”])
reduce(lambda acc,x:acc+x+”,[“1”、“2”、“3”],”)连接起来。
;唯一的区别是
reduce
生成了一个尾随空间,您不关心或需要删除它。