¿Por qué esto no funciona?
lambda: print "x"
¿No es esta una sola declaración, o es algo más? La documentación parece un poco escasa sobre lo que está permitido en una lambda ...
python
printing
lambda
python-2.x
Cualquier maíz
fuente
fuente
Respuestas:
El
lambda
cuerpo de A tiene que ser una sola expresión . En Python 2.x,print
es una declaración. Sin embargo, en Python 3,print
es una función (y una aplicación de función es una expresión, por lo que funcionará en una lambda). Puede (y debe, por compatibilidad con el reenvío :) utilizar la función de impresión con puerto posterior si está utilizando la última versión de Python 2.x:fuente
from __future__ import print_function
debe estar al principio del código? thxprint()
como método incorporado.En los casos en que estoy usando esto para un simple apagado, uso esto:
que funciona perfectamente
fuente
lo que has escrito es equivalente a
que también da como resultado un SyntaxError, python no le permite asignar un valor para imprimir en 2.xx; en python3 se podría decir
y funcionaría porque han cambiado print para que sea una función en lugar de una declaración.
fuente
from __future__ import print_function
, que habilita esto en py2.xlambda: sys.stdout.write('hi')
El cuerpo de una lambda tiene que ser una expresión que devuelva un valor.
print
, siendo una declaración, no devuelve nada, ni siquieraNone
. Del mismo modo, no puede asignar el resultado deprint
a una variable:Tampoco puede poner una asignación variable en una lambda, ya que las asignaciones son declaraciones:
fuente
Puedes hacer algo como esto.
Cree una función para transformar la declaración de impresión en una función:
E imprimirlo:
fuente
def printf(fmt, *args): print(fmt % args)
Con Python 3.x, la impresión PUEDE funcionar en una lambda, sin cambiar la semántica de la lambda.
Utilizado de manera especial, esto es muy útil para la depuración. Publico esta 'respuesta tardía', porque es un truco práctico que uso a menudo.
Supongamos que su lambda 'sin instrumentar' es:
Entonces su lambda 'instrumentada' es:
fuente
El cuerpo de una lambda tiene que ser una sola expresión .
print
es una declaración, así que está desafortunadamente.fuente
Aquí , ves una respuesta a tu pregunta.
print
no es expresión en Python, dice.fuente