gpt4 book ai didi

python - python中lambda的一个奇怪用法

转载 作者:行者123 更新时间:2023-12-04 08:04:53 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What do lambda function closures capture?

(7 个回答)


去年关闭。




我遇到的部分代码如下,其中workers是类对象的列表:

worker_threads = []
for worker in workers:
worker_fn = lambda worker=worker: worker.run(sess, coord, FLAGS.t_max)
t = threading.Thread(target=worker_fn)
t.start()
worker_threads.append(t)
通常我希望 lambda 的语法是 lambda x : func(x) ,但在这里 worker=worker 是什么?用于 ?

最佳答案

正在绑定(bind) worker 的值在 lambda 内。这是此技术的简化示例:

>>> thunks = [lambda: i for i in range(5)]
>>> [thunk() for thunk in thunks]
[4, 4, 4, 4, 4]
>>>
>>> thunks = [lambda i=i: i for i in range(5)]
>>> [thunk() for thunk in thunks]
[0, 1, 2, 3, 4]
使用表达式 lambda: i , i在调用 lambda 时评估,而不是在定义时评估。因此,在第一个示例中,所有 thunk 的结果都是 4因为这是 i 的值末尾有 range(5)环形。
使用表达式 lambda i=i: i ,现在是 i 的值正在循环内立即进行评估,以提供 i 的默认值范围。这允许每个 thunk 捕获 i 的唯一值.
如果参数被赋予不同的名称而不是阴影 i,这个概念可能会更清楚。 :
>>> thunks = [lambda n=i: n for i in range(5)]
>>> [thunk() for thunk in thunks]
[0, 1, 2, 3, 4]
在您的示例中,lambda 可以写为:
worker_fn = lambda w=worker: w.run(sess, coord, FLAGS.t_max)
这与 worker=worker: worker.run... 的行为相同。代码中的表达式,但可能更清楚地表明表达式的目的是获取 worker 的当前值在循环中并将其作为参数传递到 lambda 的主体中。

关于python - python中lambda的一个奇怪用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66266032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com