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函数的实际结果?
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)