files python python-2.7 map-function

python - files - ¿Por qué map(print, a_list) no funciona?



unzip python (6)

Para una función normal, el map funciona bien:

def increment(n): return n+1 l = [1, 2, 3, 4, 5] l = map(increment, l) print l >>> [2, 3, 4, 5, 6]

Sin embargo, si se print dentro de la función de map :

l = [1, 2, 3, 4, 5] l = map(print, l) print l

Python se quejará:

l = map(print, l) ^ SyntaxError: invalid syntax

¿Qué hace que la print sea ​​especial? ¿No print(x) también una llamada de función válida? El código anterior se prueba bajo Python 2.7.


Como han dicho otros, en Python 2.x print es una declaración. Si realmente quieres hacer esto en Python 2.x puedes usar pprint :

from pprint import pprint l = [1, 2, 3, 4, 5] p = map(pprint, l)


Desde su línea de print l , asumo que es python2, donde la print no es una función, es una declaración.


En Python 2.x, print es una declaración, no una función. Si intentas esto en Python 3.x funcionará.

En Python 2.x, puede decir print(x) y no es un error de sintaxis, pero en realidad no es una llamada de función. Al igual que 1 + (3) es lo mismo que 1 + 3 , print(x) es lo mismo que print x en Python 2.x.

En Python 2.x puedes hacer esto:

def prn(x): print x

Entonces puedes hacer:

map(prn, lst)

y funcionará. Tenga en cuenta que probablemente no desee hacer lst = map(prn, lst) porque prn() devuelve None , por lo que reemplazará su lista de valores con una lista de igual longitud de solo el valor None .

EDITAR: Otras dos soluciones para Python 2.x.

Si desea cambiar completamente el comportamiento de la print , puede hacer esto:

from __future__ import print_function map(print, lst)

Esto hace que se print en una función tal como está en Python 3.x, por lo que funciona con map() .

O bien, puede hacer esto:

from pprint import pprint map(pprint, lst)

pprint() es una función que imprime cosas y está disponible como una función integrada. No estoy exactamente seguro de cómo es diferente de la print predeterminada (dice que es una función de "impresión bonita", pero no estoy seguro de qué es exactamente lo que la hace diferente).

Además, de acuerdo con el estándar PEP 8, no es recomendable usar l como nombre de variable, por lo que estoy usando lst en mis ejemplos.

http://www.python.org/dev/peps/pep-0008/


Las respuestas anteriores funcionan para Python 2, pero no en Python 3 con los cambios tanto en el mapa como en la función de impresión.

La solución a la que he llegado para lograr lo que quería que hiciera el map(print, lst) en Python 3 es descomprimir la lista dentro de la llamada de impresión.

lst = [1, 2, 3] print(*lst, sep=''/n'')

Salida:

1 2 3

Puede encontrar más detalles sobre esto en mi respuesta a Use print inside lambda .


Porque la print no es una función.

Pero puedes hacer una envoltura de impresión, por supuesto:

>>> def p(x): ... print x ... >>> l = [1, 2, 3, 4, 5] >>> l = map(p, l) 1 2 3 4 5


Una mejor manera de mapear la impresión en 2.x sería hacer

from __future__ import print_function