Python:Lambda内部打印功能

Ada*_*m_G 2 python lambda python-3.x

有许多与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('-')))
Run Code Online (Sandbox Code Playgroud)

返回:

tester blue red <function <lambda> at 0x10918c2f0>
Run Code Online (Sandbox Code Playgroud)

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

the*_*eye 7

lambdas实际上只是功能.因此,除非您调用它们,否则您将无法获得任何结果.当你这样做

str(lambda x: print('+') if target==prediction else print('-'))
Run Code Online (Sandbox Code Playgroud)

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

<function <lambda> at 0x10918c2f0>
Run Code Online (Sandbox Code Playgroud)

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

>>> print(print("1"))
1
None
Run Code Online (Sandbox Code Playgroud)

但是,好消息是,在您的情况下,您根本不需要lamda.

print(file_name, target, prediction, '+' if target == prediction else '-')
Run Code Online (Sandbox Code Playgroud)

表达方式,

'+' if target == prediction else '-'
Run Code Online (Sandbox Code Playgroud)

被称为条件表达式,并确保你得到+if target等于prediction,-否则.

>>> file_name, target, prediction = "tester", "blue", "red"
>>> print(file_name, target, prediction, '+' if target == prediction else '-')
tester blue red -
Run Code Online (Sandbox Code Playgroud)

注:如果您使用Python 3.x中,你不需要导入print_function__future__.它已经是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'>
Run Code Online (Sandbox Code Playgroud)