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

No imprime nada. ¿Por qué es eso? He intentadoLa impresión no se imprime cuando está en el mapa, Python

sys.stdout.write(x) 

también, pero no funciona bien.

+0

Python 2 o Python 3? –

+4

Eso es un error de sintaxis en Python 2, así que asumiría Python 3. –

Respuesta

56

Desde lambda x: print(x) es un error de sintaxis en Python 3 <, estoy asumiendo Python 3. Eso significa map devuelve un generador, es decir, para obtener un mapa de llamar realmente la función de cada elemento de una lista, es necesario recorrer el generador resultante.

Afortunadamente, esto se puede hacer fácilmente:

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

Ah, y usted puede deshacerse de la lambda también, si se quiere:

list(map(print,primes)) 

Pero, en ese momento es mejor con la impresión dejando manejarlo:

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

NOTA: Dije antes que '\n'.join sería una buena idea. Eso solo es cierto para una lista de str's.

+2

Todavía es una muy mala idea (no idiomático, no obvio - mapas, filtros, listas de comprensión, etc. son para cálculos, no para efectos secundarios) aunque. Solo debe usar un ciclo for, o 'print (* primes, sep = '\ n')', o 'print ('\ n'.join (str (x) para x en números primos))'. – delnan

+0

'print (x)' no es un error de sintaxis en Python <3. Edit: Lo sentimos, es un error de sintaxis en esta pregunta. – utdemir

+1

@utdemir: Ocurriendo en un 'lambda' o cualquier otra expresión, es (con o sin parens). Supongo que OP significaba eso y que solo quiere poner atención a la redacción;) – delnan

5

Esto funciona para mí:

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

¿Está utilizando Python 2.x, donde la impresión es una afirmación, no una función?

+1

Funciona específicamente porque está usando Python 2. En Python 3, no funciona. Y OP es más probable que utilice 3.x ya que 'print' se usa como función y dado que' sys.stdout.write' "tampoco funciona". – delnan

+0

puedes hacer 'map (print, primes)' directamente, sin definir una función lambda. – hitzg

Cuestiones relacionadas