Python:Lambda内部打印功能

时间:2015-03-08 14:18:10

标签: python python-3.x lambda

有许多与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('-')))

返回:

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

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

2 个答案:

答案 0 :(得分:6)

lambda实际上只是函数。因此,除非您调用它们,否则您将无法获得任何结果。当你这样做

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

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

<function <lambda> at 0x10918c2f0>

除此之外,lambda中的另一个问题是,您实际上是在其中调用print函数。它实际上会打印结果但返回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 -

注意:如果您使用的是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'>

答案 1 :(得分:-2)

只需致电lambda

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