2011-10-11 80 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