Python:Lambda 内部打印函数

Python: Lambda Inside Print Function

有很多与 lambda 和打印相关的问题,但我找不到关于这个确切问题的任何信息。

我想在 print 语句中打印我的 lambda 函数的结果。但是,我得到了错误的输出。我正在使用 Python 3

from __future__ import print_function
file_name = "tester"
target = "blue"
prediction = "red"

print(file_name,target,prediction, str(lambda x: print('+') if target==prediction else print('-')))

这个returns:

tester blue red <function <lambda> at 0x10918c2f0>

如何获取 lambda 函数的实际结果?

lambda实际上只是函数。所以,除非你调用它们,否则你不会从它们那里得到任何结果。当你这样做时

str(lambda x: print('+') if target==prediction else print('-'))

您实际上并不是在调用 lambda 函数,而是试图获取函数本身的字符串表示形式。如您所见,字符串表示形式包含有关对象是什么以及它在内存中的存储位置的信息。

<function <lambda> at 0x10918c2f0>

除此之外,您 lambda 中的另一个问题是,您实际上是在调用其中的 print 函数。它实际上会打印结果但是 return None。因此,即使您调用 lambda 表达式,您也会打印 None。例如,

>>> print(print("1"))
1
None

但是,好消息是,就您而言,您根本不需要 lamda

print(file_name, target, prediction, '+' if target == prediction else '-')

表达式,

'+' if target == prediction else '-'

被称为 conditional expression,如果 target 等于 prediction,将确保您将得到 +,否则 -

>>> file_name, target, prediction = "tester", "blue", "red"
>>> print(file_name, target, prediction, '+' if target == prediction else '-')
tester blue red -

注意:如果你使用Python3.x,你不需要从[=29=导入print_function ].它已经是一个函数,在 Python 3.x.

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> type(print)
<class 'builtin_function_or_method'>

只需调用 lambda

print(file_name,target,prediction, (lambda: '+' if target==prediction else '-')())