Dalam python 2.6 , saya ingin melakukan:
f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception
Ini jelas bukan sintaks. Apakah mungkin untuk melakukan if
in lambda
dan jika demikian bagaimana melakukannya?
Terima kasih
python
lambda
python-2.6
Orang
sumber
sumber
Jawaban:
Sintaks yang Anda cari:
Tapi Anda tidak bisa menggunakan
print
atauraise
lambda.sumber
if
lambda?" bukan "apa cara terbaik untuk menulis lambda yang mengembalikan Benar jika nomor genap?"mengapa Anda tidak mendefinisikan suatu fungsi saja?
benar-benar tidak ada pembenaran untuk menggunakan lambda dalam kasus ini.
sumber
print
belum berfungsi dalam 2.6. :)def
- umumnya adalah Ide yang Sangat Buruk (tm). Cukup gunakandef
sehingga pemrogram fana hanya bisa membaca, menafsirkan, memahami dan mempertahankannya.Mungkin baris python terburuk yang saya tulis sejauh ini:
Jika x == 2 Anda mencetak,
jika x! = 2 Anda menaikkan.
sumber
Anda dapat dengan mudah mengajukan pengecualian dalam lambda, jika itu yang benar-benar ingin Anda lakukan.
Apakah ini ide yang bagus? Naluri saya secara umum adalah membiarkan kesalahan melaporkan dari lambdas; biarkan memiliki nilai Tidak ada dan meningkatkan kesalahan pada pemanggil. Saya tidak berpikir ini inheren jahat, meskipun - saya menganggap sintaks "y jika x else z" itu sendiri lebih buruk - hanya pastikan Anda tidak mencoba terlalu banyak hal ke dalam tubuh lambda.
sumber
x = RaiseValueErrorOnNone(x)
, sekali lagi, tergantung pada kasingnya.Lambdas in Python cukup membatasi sehubungan dengan apa yang Anda boleh gunakan. Secara khusus, Anda tidak dapat memiliki kata kunci (kecuali untuk operator seperti
and
,not
,or
, dll) di dalam tubuh mereka.Jadi, tidak mungkin Anda bisa menggunakan lambda sebagai contoh (karena Anda tidak bisa menggunakan
raise
), tetapi jika Anda mau mengakui itu ... Anda bisa menggunakan:sumber
perhatikan Anda dapat menggunakan beberapa yang lain ... jika pernyataan dalam definisi lambda Anda:
sumber
Jika Anda masih ingin mencetak, Anda dapat mengimpor modul yang akan datang
sumber
Anda juga dapat menggunakan Operator Logika untuk memiliki sesuatu seperti Conditional
Anda dapat melihat lebih banyak tentang Logical Operator di sini
sumber
if
sintaks selalu lebih disukai daripada ini. Cara yang jelas untuk memeriksa kondisi.if
pernyataan, jadi saya menemukan ini dengan cara yang tidak jelas .apa yang Anda butuhkan sebenarnya
sekarang panggil fungsi seperti yang Anda butuhkan
sumber
Cuplikan ini seharusnya membantu Anda:
sumber
Kode contoh berikut berfungsi untuk saya. Tidak yakin apakah ini terkait langsung dengan pertanyaan ini, tetapi harap ini membantu dalam beberapa kasus lainnya.
sumber
Cobalah:
Di luar:
sumber
Cara mudah untuk melakukan if dalam lambda adalah dengan menggunakan daftar pemahaman.
Anda tidak dapat menaikkan pengecualian di lambda, tetapi ini adalah cara di Python 3.x untuk melakukan sesuatu yang dekat dengan contoh Anda:
Contoh lain:
kembalikan 1 jika M sebaliknya 0
sumber