在我的代码中,我需要尽可能简化我的代码行。 编辑:我认为我不够清楚 - 它需要是一行代码。 我需要在lambda表达式中放置一个for循环,类似于:
x = lambda x: (for i in x : print i)
我只是不知道如何实现它。 谢谢!
答案 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)