Mengapa ini tidak berhasil?
lambda: print "x"
Apakah ini bukan pernyataan tunggal, atau itu sesuatu yang lain? Dokumentasi tampaknya sedikit tentang apa yang diperbolehkan dalam ...
python
printing
lambda
python-2.x
Anycorn
sumber
sumber
Jawaban:
lambda
Tubuh A harus berupa ekspresi tunggal . Dalam Python 2.x,print
adalah pernyataan. Namun, dalam Python 3,print
adalah fungsi (dan aplikasi fungsi adalah ekspresi, sehingga akan berfungsi di lambda). Anda dapat (dan seharusnya, untuk kompatibilitas maju :) menggunakan fungsi cetak porting belakang jika Anda menggunakan Python 2.x terbaru:sumber
from __future__ import print_function
harus berada di awal kode? thxprint()
metode bawaan.Dalam kasus di mana saya menggunakan ini untuk mematikan sederhana saya menggunakan ini:
yang bekerja dengan sempurna.
sumber
setara dengan apa yang Anda tulis
yang juga menghasilkan SyntaxError, python tidak membiarkan Anda menetapkan nilai untuk mencetak dalam 2.xx; di python3 bisa dibilang
dan itu akan berhasil karena mereka telah mengubah cetak menjadi fungsi alih-alih pernyataan.
sumber
from __future__ import print_function
, yang memungkinkan ini di py2.xlambda: sys.stdout.write('hi')
Tubuh lambda harus berupa ekspresi yang mengembalikan nilai.
print
, menjadi pernyataan, tidak mengembalikan apa pun, bahkan tidakNone
. Demikian pula, Anda tidak dapat menetapkan hasilprint
ke variabel:Anda juga tidak dapat menempatkan tugas variabel dalam lambda, karena tugas adalah pernyataan:
sumber
Anda dapat melakukan sesuatu seperti ini.
Buat fungsi untuk mengubah pernyataan cetak menjadi fungsi:
Dan cetak:
sumber
def printf(fmt, *args): print(fmt % args)
Dengan Python 3.x, cetak BISA bekerja di lambda, tanpa mengubah semantik lambda.
Digunakan dengan cara khusus ini sangat berguna untuk debugging. Saya memposting 'jawaban terlambat' ini, karena ini adalah trik praktis yang sering saya gunakan.
Misalkan lambda Anda yang 'tidak memiliki informasi' adalah:
Maka lambda 'yang diinstrumentasi' Anda adalah:
sumber
Tubuh lambda harus berupa ekspresi tunggal .
print
adalah pernyataan, jadi itu keluar, sayangnya.sumber
Di sini , Anda melihat jawaban untuk pertanyaan Anda.
print
bukan ekspresi dalam Python, katanya.sumber