Por que isso não funciona?
lambda: print "x"
Esta não é uma afirmação única ou é outra coisa? A documentação parece um pouco esparsa sobre o que é permitido em um lambda ...
python
printing
lambda
python-2.x
Anycorn
fonte
fonte
Respostas:
O
lambda
corpo de A tem que ser uma única expressão . No Python 2.x,print
é uma declaração. No entanto, no Python 3,print
é uma função (e um aplicativo de função é uma expressão, portanto, ele funciona em uma lambda). Você pode (e deve, para compatibilidade direta) usar a função de impressão com porta traseira se estiver usando o Python 2.x mais recente:fonte
from __future__ import print_function
deveria estar no início do código? thxprint()
como método interno.Nos casos em que estou usando isso para simplificar a remoção, uso o seguinte:
o que funciona perfeitamente
fonte
o que você escreveu é equivalente a
que também resulta em um SyntaxError, o python não permite atribuir um valor para imprimir em 2.xx; em python3 você poderia dizer
e funcionaria porque eles mudaram a impressão para ser uma função em vez de uma instrução.
fonte
from __future__ import print_function
, o que permite isso em py2.xlambda: sys.stdout.write('hi')
O corpo de uma lambda deve ser uma expressão que retorne um valor.
print
, sendo uma afirmação, não retorna nada, nem mesmoNone
. Da mesma forma, você não pode atribuir o resultado deprint
a uma variável:Você também não pode colocar uma atribuição de variável em um lambda, pois atribuições são instruções:
fonte
Você pode fazer algo assim.
Crie uma função para transformar a instrução print em uma função:
E imprima:
fonte
def printf(fmt, *args): print(fmt % args)
Com o Python 3.x, o CAN pode funcionar em uma lambda, sem alterar a semântica da lambda.
Usado de uma maneira especial, é muito útil para depuração. Eu posto essa 'resposta tardia', porque é um truque prático que costumo usar.
Suponha que sua lambda 'não instrumentada' seja:
Então seu lambda 'instrumentado' é:
fonte
O corpo de um lambda deve ser uma expressão única .
print
é uma afirmação, então saiu, infelizmente.fonte
Aqui , você vê uma resposta para sua pergunta.
print
não é expressão em Python, diz.fonte