lambda与打印和列表理解

时间:2015-07-21 14:30:54

标签: python list printing lambda

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

3 个答案:

答案 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']