lambda 内的循环
我想尽量简化我的代码,最好只用一行代码。
我需要在一个lambda表达式里面放一个for循环,类似这样的:
x = lambda x: (for i in x : print i)
10 个回答
1
如果你和我一样,只想在一个lambda表达式里打印一串数字,而不想得到返回值(返回的是一堆None)。
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')
2
anon和chepner的回答是朝着正确的方向走的。Python 3.x有一个打印功能,如果你想在一个函数里面使用打印(包括lambda函数),你就需要这个功能。
不过,在Python 2.x中,你可以很简单地通过从标准库的future模块导入来获得打印功能。你可以看看这个:
>>>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
>>>
20
为了补充chepner的回答,如果你使用的是Python 3.0,可以这样做:
x = lambda x: list(map(print, x))
当然,这个方法前提是你将来能使用Python 3以上的版本……我觉得这样写看起来更简洁,不过它的返回值有点奇怪,但你可能也不会用到这个返回值。
我就把这个放在这里,供你参考。
43
如果有人遇到类似的问题,这里有一些信息供参考...
这里大多数的解决方案都很简洁,只有一行代码,读起来也很容易。我想再补充一个方法,它不需要用到lambda(我假设你使用lambda只是为了让代码变成一行)。
相反,你可以使用简单的列表推导式。
[print(i) for i in x]
顺便提一下,返回的结果将是一个包含None
的列表。
25
因为 for
循环是一种语句(在 Python 2.x 中,print
也是),所以你不能把它放在一个 lambda 表达式里。相反,你需要使用 sys.stdout
的 write
方法,并结合 join
方法来实现。
x = lambda x: sys.stdout.write("\n".join(x) + "\n")