【发布时间】:2013-04-04 01:42:23
【问题描述】:
我今天浏览了我的代码库,发现了这个:
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开关 -
所有的 lambda 表达式都可能只是
((lambda _: '-o')((yield x)) for x in kvs) -
... 并且返回语句也可以只表示为
[v for o in kvs for v in ["-o", o]]。 -
这让我想起了 duffs 设备。从今天起,这将永远被称为 Dogs 设备哈哈。
标签: python ssh lambda functional-programming generator