我今天在查看我的代码库时发现了这个:
def optionsToArgs(options, separator='='):
kvs = [
(
"%(option)s%(separator)s%(value)s" %
{'option' : str(k), 'separator' : separator, 'value' : str(v)}
) for k, v in options.items()
]
return list(
reversed(
list(
(lambda l, t:
(lambda f:
(f((yield x)) for x in l)
)(lambda _: t)
)(kvs, '-o')
)
)
)
它似乎接受参数字典并将其转换为shell命令的参数列表。它使用了生成器推导式中的yield,这让我觉得很不可思议...
>>> optionsToArgs({"x":1,"y":2,"z":3})
['-o', 'z=3', '-o', 'x=1', '-o', 'y=2']
它是如何工作的?
list(reversed(list(
这一部分,用于正确获取-o
开关。 - ch3ka((lambda _: '-o')((yield x)) for x in kvs)
。 - Pavel Anossov[v for o in kvs for v in ["-o", o]]
。 - l4mpi