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 ...
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 ...
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:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
deveria estar no início do código? thx
print()
como método interno.
Nos casos em que estou usando isso para simplificar a remoção, uso o seguinte:
fn = lambda x: sys.stdout.write(str(x) + "\n")
o que funciona perfeitamente
o que você escreveu é equivalente a
def anon():
return print "x"
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
lambda: print('hi')
e funcionaria porque eles mudaram a impressão para ser uma função em vez de uma instrução.
from __future__ import print_function
, o que permite isso em py2.x
lambda: 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 mesmo None
. Da mesma forma, você não pode atribuir o resultado de print
a uma variável:
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
Você também não pode colocar uma atribuição de variável em um lambda, pois atribuições são instruções:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Você pode fazer algo assim.
Crie uma função para transformar a instrução print em uma função:
def printf(text):
print text
E imprima:
lambda: printf("Testing")
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:
lambda: 4
Então seu lambda 'instrumentado' é:
lambda: (print (3), 4) [1]