有许多与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函数的实际结果?
答案 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 '-')())