Dlaczego to nie działa?
lambda: print "x"
Czy to nie jest pojedyncze stwierdzenie, czy też coś innego? Dokumentacja wydaje się trochę skąpa na temat tego, co jest dozwolone w lambdzie ...
python
printing
lambda
python-2.x
Anycorn
źródło
źródło
Odpowiedzi:
A
lambda
„s ciało musi być pojedynczy wyraz . W Pythonie 2.xprint
jest instrukcja. Jednak w Pythonie 3print
jest funkcją (a aplikacja funkcji jest wyrażeniem, więc będzie działać w lambdzie). Możesz (i powinieneś, w celu zapewnienia kompatybilności do przodu) użyć funkcji drukowania z portem wstecznym, jeśli używasz najnowszego Pythona 2.x:źródło
from __future__ import print_function
znajdować się na początku kodu? thxprint()
wbudowaną metodę.W przypadkach, w których używam tego do prostego usuwania, używam tego:
który działa doskonale.
źródło
to, co napisałeś, jest równoważne
co również skutkuje błędem SyntaxError, python nie pozwala przypisać wartości do drukowania w 2.xx; w pythonie3 można by powiedzieć
i działałoby, ponieważ zmienili print na funkcję zamiast instrukcji.
źródło
from __future__ import print_function
, co umożliwia to w py2.xlambda: sys.stdout.write('hi')
Treść wyrażenia lambda musi być wyrażeniem zwracającym wartość.
print
będąc oświadczeniem, nic nie zwraca, nawetNone
. Podobnie nie możesz przypisać wynikuprint
do zmiennej:Nie możesz również umieścić przypisania zmiennej w lambdzie, ponieważ przypisania są instrukcjami:
źródło
Możesz zrobić coś takiego.
Utwórz funkcję, która przekształci instrukcję print w funkcję:
I wydrukuj:
źródło
def printf(fmt, *args): print(fmt % args)
W Pythonie 3.x wypisz CAN działa w lambdzie, bez zmiany semantyki lambda.
Używany w specjalny sposób, jest bardzo przydatny do debugowania. Wpisuję tę „późną odpowiedź”, ponieważ jest to praktyczna sztuczka, której często używam.
Załóżmy, że twoja „nieudokumentowana” lambda to:
Zatem twoja `` instrumentalna '' lambda to:
źródło
Treść lambdy musi być pojedynczym wyrażeniem .
print
jest oświadczeniem, więc niestety nie ma.źródło
Tutaj zobaczysz odpowiedź na swoje pytanie.
print
nie jest wyrażeniem w Pythonie, mówi.źródło