lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)]
此代码有什么问题,它没有打印任何内容。
如果我尝试使用其他功能进行打印,则工作正常。但我试图在同一声明中添加打印代码。
以下代码为我工作,
map(lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)])
答案 0 :(得分:0)
逗号正在终止lambda。您正在创建具有两个值的元组。第一个是lambda i: print(i)
,第二个是列表理解。就好像你这样做:
def func(i):
print(i)
(func, ["%d...])
第二个问题是你似乎无法在任何地方调用lambda。 lambda
只创建一个没有名称的函数。要执行它,您需要将其分配给变量,然后调用它:
x = lambda i: print(i)
x(12)
如果你要做的是从列表推导中调用print函数,它应该在python 3.x中正常工作,因为print
是一个函数。如果你想在python 2.x中使用它,有几个解决方案。例如,您可以导入打印功能:
from __future__ import print_function
[print("%d even"% i) if i % 2 == 0 else print("%d odd"% i) for i in random.sample(range(100), 10)]
如果你想使用lambda,那么将lambda保存为变量,并使用列表推导中的变量:
func = lambda i: print(i)
[func("%d even"% i) if i % 2 == 0 else func("%d odd"% i) for i in random.sample(range(100), 10)]
答案 1 :(得分:0)
lambda的身体必须是单个表达式。在Python 2.x中,print是一个声明。但是,在Python 3中,print是一个函数(函数应用程序是一个表达式,因此它将在lambda中工作)。如果您使用的是最新的Python 2.x,您可以(并且应该为了向前兼容性:)使用后端打印功能
来自Why doesn't print work in a lambda?
如果您使用的是python2.x。先试试这个
from __future__ import print_function
实施例
In [2]: from __future__ import print_function
In [3]: myfn = lambda i: print(i)
In [4]: myfn(55)
55
答案 2 :(得分:0)
你正在创建一个由lambda函数和列表组成的元组。
但是,您可以轻松访问元组的最后一项(这是您要打印的结果):
>>> g = lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)]
>>> g
(<function <lambda> at 0x1063fa268>, ['52 even', '9 odd', '25 odd', '57 odd', '77 odd', '71 odd', '63 odd', '99 odd', '8 even', '79 odd'])
>>> type(g)
<class 'tuple'>
>>> for item in g:
... print(item)
...
<function <lambda> at 0x1063fa268>
['52 even', '9 odd', '25 odd', '57 odd', '77 odd', '71 odd', '63 odd', '99 odd', '8 even', '79 odd']
>>> g[0]
<function <lambda> at 0x1063fa268>
>>> g[1]
['52 even', '9 odd', '25 odd', '57 odd', '77 odd', '71 odd', '63 odd', '99 odd', '8 even', '79 odd']