Perché non funziona?
lambda: print "x"
Non è una singola affermazione o è qualcos'altro? La documentazione sembra un po 'scarsa su ciò che è permesso in un lambda ...
Perché non funziona?
lambda: print "x"
Non è una singola affermazione o è qualcos'altro? La documentazione sembra un po 'scarsa su ciò che è permesso in un lambda ...
Risposte:
Il lambda
corpo di A deve essere una singola espressione . In Python 2.x print
è un'istruzione. Tuttavia, in Python 3 print
è una funzione (e un'applicazione di funzione è un'espressione, quindi funzionerà in una lambda). Puoi (e dovresti, per compatibilità con il futuro :) usare la funzione di stampa con back-port se stai usando l'ultima versione di Python 2.x:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
essere all'inizio del codice? grazie
print()
come metodo incorporato.
Nei casi in cui lo sto usando per un semplice stubbing, uso questo:
fn = lambda x: sys.stdout.write(str(x) + "\n")
che funziona perfettamente.
ciò che hai scritto equivale a
def anon():
return print "x"
che risulta anche in SyntaxError, python non consente di assegnare un valore per la stampa in 2.xx; in python3 potresti dire
lambda: print('hi')
e funzionerebbe perché hanno cambiato print per essere una funzione anziché un'istruzione.
from __future__ import print_function
, che lo abilita in py2.x
lambda: sys.stdout.write('hi')
Il corpo di una lambda deve essere un'espressione che restituisce un valore. print
, essendo una dichiarazione, non restituisce nulla, nemmeno None
. Allo stesso modo, non è possibile assegnare il risultato di print
a una variabile:
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
Inoltre, non puoi inserire un'assegnazione variabile in una lambda, poiché le assegnazioni sono istruzioni:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Puoi fare qualcosa del genere.
Crea una funzione per trasformare l'istruzione print in una funzione:
def printf(text):
print text
E stampalo:
lambda: printf("Testing")
def printf(fmt, *args): print(fmt % args)
Con Python 3.x, la stampa PU work funzionare in una lambda, senza cambiare la semantica della lambda.
Utilizzato in modo speciale, è molto utile per il debug. Pubblico questa "risposta tardiva", perché è un trucco pratico che uso spesso.
Supponiamo che il tuo lambda "non strutturato" sia:
lambda: 4
Quindi la tua lambda "strumentata" è:
lambda: (print (3), 4) [1]