我正在学习Google的机器学习速成课程,并且找到了这段代码,但是我不明白为什么使用“ lambda:”来定义此功能。
training_input_fn = lambda:my_input_fn(training_examples,training_targets["median_house_value"],batch_size=batch_size)
为什么我们不能写:
training_input_fn = my_input_fn(training_examples,training_targets["median_house_value"],batch_size=batch_size)
从我发现的结果来看,lambda函数用于使用函数而无需显式定义它们,并且具有如下语法:
lambda x:(x * 2)
此代码也不遵循语法。
答案 0 :(得分:1)
不同之处在于,使用training_input_fn = my_input_fn(...)
,training_input_fn
现在是您的数据,而使用training_input_fn = lambda: ...
,training_input_fn
现在是您需要的功能打电话获取您的数据。
因此,无论您要将training_input_fn
传递到哪里,都可能希望收到一个函数,它将调用该函数来获取数据,例如:
def foo(training_input_fn):
the_data = training_input_fn()
我个人更愿意使用functools.partial
而不是lambda
包装器来实现此目的:
from functools import partial
training_input_fn = partial(my_input_fn, training_examples, training_targets["median_house_value"], batch_size=batch_size)
现在这也是一个 callable ,它将调用您的函数并返回其数据,但是,我认为,这比您可能会混淆的{{1} }包装器。