为什么使用lambda函数定义此函数?

时间:2019-06-14 08:16:39

标签: python tensorflow

我正在学习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)

此代码也不遵循语法。

链接到代码:https://colab.research.google.com/notebooks/mlcc/validation.ipynb?utm_source=mlcc&utm_campaign=colab-external&utm_medium=referral&utm_content=validation-colab&hl=en#scrollTo=Xyz6n1YHbGef

1 个答案:

答案 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} }包装器。