【发布时间】:2023-02-20 22:43:23
【问题描述】:
我正在尝试使用 this tutorial 理解标准 Cart-pole 示例的深度 Q 学习算法,并且在 def optimize_model() 方法中,我不明白 lambda 表达式是返回布尔值还是索引:
non_final_mask = torch.tensor(tuple(map(lambda s: s is not None, batch.next_state)), device=device, dtype=torch.bool)
其中 batch.next_state 只是一个列表,而 s 仅在此行中定义。
从文档和this example来看,lambda s: s is not None产生了一个布尔值。但是,当我简单地输入 python 时:
>>> lambda s: s is None
我明白了
<function <lambda> at 0x100997010>
如果我确实从上述 lambda 表达式中得到了一个布尔值,map() 方法如何将它作为第一个参数处理?
感谢您提前提供帮助。
【问题讨论】:
-
函数是一个对象。如果你想称呼它,您需要添加括号并提供参数。
map为您做这件事。 -
my_totally_cool_lambda = lambda s: s is None....my_totally_cool_lambda ("Hi")....my_totally_cool_lambda (None) -
map 有据可查——它将一个函数作为第一个参数,将一个可迭代对象作为第二个参数——
lambda s: s is not None定义了一个使用 1 个参数并返回 True 或 False 的函数。 --> how-are-lambdas-useful -
@Patrick Artner 谢谢!好的,那么在这种情况下 lambda 确实返回了一个布尔值。但是抱歉,我找不到 map() 如何将布尔值作为第一个参数处理,这就是我发布此问题的原因。
-
@trincot 谢谢!那么, map() 是否本质上执行了这个操作:
(lambda s: s != None)(batch.next_state)?