2015-07-21 59 views
0
lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)] 

这段代码有什么问题,它不打印任何东西。带打印和列表理解的lambda

如果我尝试使用其他功能打印,它工作正常。但我试图在相同的语句中添加打印代码。

下面的代码为我工作,

map(lambda i: print(i),["%d even"% i if i % 2 == 0 else "%d odd"% i for i in random.sample(range(100), 10)]) 
+2

你随时随地调用拉姆达?定义lambda不会自动调用它。 –

+0

@安娜,谢谢。请你让我知道如何在这里调用这个lambda – user1423015

+0

你真的想完成什么?你是否试图从列表理解中调用打印功能? –

回答

0

逗号被终止拉姆达。你正在创建一个有两个值的元组。第一个是lambda i: print(i),第二个是列表理解。这就好像你正在这样做:

def func(i): 
    print(i) 
(func, ["%d...]) 

第二个问题是,你似乎没有在任何地方调用lambda。 lambda只是创建一个没有名字的函数。对于它来执行,你需要将其分配给一个变量,然后调用它:

x = lambda i: print(i) 
x(12) 

如果你想要做的是从列表理解中调用打印功能,它应该在正常工作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)] 

如果你想使用拉姆达,那么拉姆达保存为一个变量,在列表理解使用变量:

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)] 
+0

删除逗号也不起作用。但如果我删除lambda部分并使用另一个函数来打印它正在工作的值。但我试图在单个语句中添加打印功能。然后,它不工作。 – user1423015

0

拉姆达的身体必须是一个单一的表达。在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 
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']