2011-10-11 38 views
35
primes = [2,3,5,7..] (prime numbers) 
map(lambda x:print(x),primes) 

它不打印任何东西。 这是为什么? 我试过了打印在地图中不打印时,Python

sys.stdout.write(x) 

也是,但也不起作用。

+0

Python 2或Python 3? –

+4

这是Python 2中的一个语法错误,所以我会假定为Python 3. –

回答

56

由于lambda x: print(x)是在Python < 3语法错误,我假设的Python 3,这意味着map返回一个生成器,意思是让地图以实际调用列表中的每个元素的功能,你需要通过迭代最终的发电机。

幸运的是,这可以轻松完成:

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

哦,你可以摆脱拉姆达也一样,如果你喜欢:

list(map(print,primes)) 

但是,在这一点上,你最好关闭与让打印处理:

print(*primes, sep='\n') 

注:我刚才说'\n'.join将是一个好主意。这只对str的列表是真的。

+2

它仍然是一个非常糟糕的主意(非惯用的,不明显 - 地图,过滤器,列表解析等用于计算,而不是副作用)虽然。你应该使用一个for循环,或者'print(* primes,sep ='\ n')',或者'print('\ n'.join(对于素数为x的str(x))''。 – delnan

+0

'print(x)'在Python <3中不是语法错误。编辑:对不起,这是这个问题的语法错误。 – utdemir

+1

@utdemir:在“lambda”或任何其他表达式中出现,它是(有或没有parens)。我认为OP意味着这一点,你只是想挑剔的措辞; – delnan

5

这个工作对我来说:

>>> from __future__ import print_function 
>>> map(lambda x: print(x), primes) 
2 
3 
5 
7 
17: [None, None, None, None] 

你使用Python 2.x的地方打印是一个声明,而不是一个功能?

+1

它的工作原理是因为您使用的是Python 2.在Python 3中,它没有。并且OP更可能使用3.x,因为'print'被用作函数,并且因为'sys.stdout.write'“也不起作用。 – delnan

+0

你可以直接实现map(print,primes)',而不需要定义lambda函数。 – hitzg