内部lambda的Python循环

时间:2014-05-27 18:11:45

标签: python for-loop lambda

在我的代码中,我需要尽可能简化我的代码行。 编辑:我认为我不够清楚 - 它需要是一行代码。 我需要在lambda表达式中放置一个for循环,类似于:

x = lambda x: (for i in x : print i)

我只是不知道如何实现它。 谢谢!

6 个答案:

答案 0 :(得分:10)

由于for循环是一个语句(在{2.}}中,在Python 2.x中),因此不能将其包含在lambda表达式中。相反,您需要在print上使用write方法以及sys.stdout方法。

join

答案 1 :(得分:4)

要添加chepner的Python 3.0答案,您可以选择:

x = lambda x: list(map(print, x))

当然,只有你有使用Python的方法>未来3 ...在我看来看起来有点干净,但它也有一个奇怪的回报值,但无论如何你都可能放弃它。

我会把它留在这里作为参考。

答案 2 :(得分:3)

以防万一有人正在寻找类似的问题......

这里给出的大多数解决方案都是一行,并且非常易读且简单。只是想添加一个不需要使用lambda的东西(我假设你正在尝试使用lambda只是为了使它成为一行代码)。 相反,您可以使用简单的列表理解。

[print(i) for i in x]

顺便说一句,返回值将是None s上的列表。

答案 3 :(得分:2)

anon和chepner的答案是正确的。 Python 3.x有一个打印功能,如果你想在一个函数中嵌入print(以及更好的lambda),这就是你需要的。

但是,您可以通过从标准库的未来模块导入,在python 2.x中轻松获得打印功能。看看:

>>>from __future__ import print_function
>>>
>>>iterable = ["a","b","c"]
>>>map(print, iterable)
a
b
c
[None, None, None]
>>>

我猜这看起来很奇怪,所以如果你想要抑制[None,None,None]的输出,你可以自由地将返回分配给_(你只对副作用感兴趣,我假设) :

>>>_ = map(print, iterable)
a
b
c
>>>

答案 4 :(得分:1)

如果你像我一样只想在lambda中打印一个序列,而不是获得返回值(无列表)。

x = range(3)
from __future__ import print_function           # if not python 3
pra = lambda seq=x: map(print,seq) and None     # pra for 'print all'
pra()
pra('abc')

答案 5 :(得分:0)

我们可以在 for 循环中使用 lambda 函数 按照下面的代码

list1 = [1,2,3,4,5]

list2 = []

for i in list1:

    f = lambda i: i /2

    list2.append(f(i))
print(list2)