Rumah >pembangunan bahagian belakang >Tutorial Python >Panduan untuk fungsi python lambda, dengan contoh
Walaupun Python adalah bahasa pengaturcaraan berorientasikan objek, fungsi Lambda berguna apabila anda melakukan pelbagai jenis pengaturcaraan berfungsi.
Nota: Artikel ini akan menganggap anda sudah memahami pengaturcaraan Python dan cara menggunakan fungsi biasa. Ia juga diandaikan bahawa anda mempunyai Python 3.8 atau ke atas yang dipasang pada peranti anda.
Takeaways Key
tanpa nama
. Fungsi python biasa ditakrifkan oleh kata kunci DEF. Fungsi Lambda di Python biasanya terdiri daripada kata kunci Lambda, sebilangan argumen, dan satu ungkapan.
Nota: Istilah Fungsi Lambda, Ekspresi Lambda, dan Lambda boleh digunakan secara bergantian, bergantung kepada bahasa pengaturcaraan atau pengaturcara.
Fungsi Lambda kebanyakannya digunakan sebagai satu-liners. Mereka digunakan dengan kerap dalam fungsi pesanan yang lebih tinggi seperti peta () dan penapis (). Ini kerana fungsi tanpa nama diluluskan sebagai hujah kepada fungsi pesanan yang lebih tinggi, yang bukan sahaja dilakukan dalam pengaturcaraan Python.
Lambdas sangat bagus apabila digunakan untuk bersyarat bersyarat dalam kerangka UI seperti TKInter, Wxpython, Kivy, dan lain -lain. Walaupun kerja -kerja kerangka Python GUI tidak diliputi dalam artikel ini, beberapa coretan kod menunjukkan penggunaan lambda yang berat berdasarkan interaksi pengguna.
Kerana Python adalah bahasa pengaturcaraan berorientasikan objek, semuanya adalah objek. Kelas python, contoh kelas, modul dan fungsi semuanya dikendalikan sebagai objek.
Objek fungsi boleh diberikan kepada pembolehubah.
Ia tidak biasa untuk memberikan pembolehubah kepada fungsi biasa dalam Python. Tingkah laku ini juga boleh digunakan untuk fungsi lambda. Ini kerana mereka berfungsi objek, walaupun mereka tidak bernama:
<span>def greet(name): </span> <span>return <span>f'Hello <span>{name}</span>'</span> </span> greetings <span>= greet </span>greetings<span>('Clint') </span><span>>>>> </span>Hello Clint
kemungkinan anda perlu menggunakan fungsi lambda dalam fungsi terbina dalam seperti penapis () dan peta (), dan juga dengan pengurangan ()-yang diimport dari modul functiols di python, kerana ia bukan fungsi terbina dalam. Secara lalai, fungsi pesanan lebih tinggi adalah fungsi yang menerima fungsi lain sebagai argumen.
Seperti yang dilihat dalam contoh kod di bawah, fungsi normal boleh digantikan dengan lambdas, diluluskan sebagai argumen ke dalam mana-mana fungsi pesanan yang lebih tinggi:
<span>#map function </span>names <span>= ['Clint', 'Lisa', 'Asake', 'Ada'] </span> greet_all <span>= list(map(greet, names)) </span><span>print(greet_all) </span><span>>>>> </span><span>['Hello Clint', 'Hello Lisa', 'Hello Asake', 'Hello Ada']</span>
<span>#filter function </span>numbers <span>= [11, 12, 13, 14, 15, 16, 17, 18, 19, 20] </span><span>def multiples_of_three(x): </span> <span>return x % 3 == 0 </span> <span>print(list(filter(multiples_of_three, numbers))) </span><span>>>>> </span><span>[12, 15, 18]</span>
<span>#reduce function </span>numbers <span>= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] </span><span>def add_numbers(x, y): </span> <span>return x * y </span> <span>print(reduce(add_numbers, numbers)) </span><span>>>>> </span><span>55</span>
Titik kekeliruan yang sama di kalangan pemaju adalah membezakan antara pernyataan dan ungkapan dalam pengaturcaraan.
Pernyataan adalah apa -apa kod yang melakukan sesuatu atau melakukan tindakan - seperti jika atau keadaan semasa.
Ekspresi diperbuat daripada gabungan pembolehubah, nilai, dan pengendali dan menilai nilai baru.
Perbezaan ini penting kerana kita meneroka subjek fungsi Lambda di Python. Ungkapan seperti yang di bawah mengembalikan nilai:
square_of_three <span>= 3 ** 2 </span><span>print(square_of_three) </span><span>>>>> </span><span>9</span>
pernyataan kelihatan seperti ini:
<span>for i in range(len(numbers), 0, -1): </span> <span>if i % 2 == 1: </span> <span>print(i) </span> <span>else: </span> <span>print('even') </span><span>>>>> </span>even <span>9 even 7 even 5 even 3 even 1</span>
Panduan Gaya Python menyatakan bahawa setiap fungsi lambda mesti bermula dengan kata kunci Lambda (tidak seperti fungsi biasa, yang bermula dengan kata kunci DEF). Sintaks untuk fungsi lambda umumnya seperti ini:
<span>lambda arguments : expression</span>
Fungsi Lambda boleh mengambil beberapa argumen kedudukan, hujah kata kunci, atau kedua -duanya, diikuti oleh kolon dan hanya satu ungkapan. Tidak boleh ada lebih daripada satu ungkapan, kerana ia terhad secara sintaktik. Mari kita periksa contoh ungkapan lambda di bawah:
add_number <span>= lambda x, y : x + y </span><span>print(add_number(10, 4)) </span><span>>>>> </span><span>14</span>
Dari contoh di atas, ungkapan lambda diberikan kepada pembolehubah add_number. Panggilan fungsi dibuat dengan lulus hujah, yang menilai hingga 14.
mari kita ambil contoh lain di bawah:
<span>def greet(name): </span> <span>return <span>f'Hello <span>{name}</span>'</span> </span> greetings <span>= greet </span>greetings<span>('Clint') </span><span>>>>> </span>Hello Clint
Seperti yang dilihat di atas, fungsi lambda menilai kepada 728.0. Gabungan argumen posisional dan kata kunci digunakan dalam fungsi lambda python. Semasa menggunakan hujah -hujah kedudukan, kita tidak dapat mengubah pesanan yang digariskan dalam definisi fungsi. Walau bagaimanapun, kita boleh meletakkan hujah kata kunci di mana -mana kedudukan hanya selepas hujah -hujah kedudukan.
Fungsi Lambda sentiasa dilaksanakan sama seperti Ekspresi Fungsi Segera (IIFES) dalam JavaScript. Ini kebanyakannya digunakan dengan penterjemah python, seperti yang ditunjukkan dalam contoh berikut:
<span>#map function </span>names <span>= ['Clint', 'Lisa', 'Asake', 'Ada'] </span> greet_all <span>= list(map(greet, names)) </span><span>print(greet_all) </span><span>>>>> </span><span>['Hello Clint', 'Hello Lisa', 'Hello Asake', 'Hello Ada']</span>
Objek fungsi Lambda dibalut dalam kurungan, dan satu lagi kurungan berikutnya dengan argumen yang diluluskan. Sebagai IIFE, ungkapan dinilai dan fungsi mengembalikan nilai yang diberikan kepada pembolehubah.
Fungsi Python Lambda juga boleh dilaksanakan dalam pemahaman senarai. Pemahaman senarai sentiasa mempunyai ungkapan output, yang digantikan oleh fungsi lambda. Berikut adalah beberapa contoh:
<span>#filter function </span>numbers <span>= [11, 12, 13, 14, 15, 16, 17, 18, 19, 20] </span><span>def multiples_of_three(x): </span> <span>return x % 3 == 0 </span> <span>print(list(filter(multiples_of_three, numbers))) </span><span>>>>> </span><span>[12, 15, 18]</span>
<span>#reduce function </span>numbers <span>= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] </span><span>def add_numbers(x, y): </span> <span>return x * y </span> <span>print(reduce(add_numbers, numbers)) </span><span>>>>> </span><span>55</span>
Fungsi Lambda boleh digunakan semasa menulis ekspresi ternary di Python. Ekspresi ternary menghasilkan hasil berdasarkan keadaan tertentu. Semak contoh di bawah:
square_of_three <span>= 3 ** 2 </span><span>print(square_of_three) </span><span>>>>> </span><span>9</span>
<span>for i in range(len(numbers), 0, -1): </span> <span>if i % 2 == 1: </span> <span>print(i) </span> <span>else: </span> <span>print('even') </span><span>>>>> </span>even <span>9 even 7 even 5 even 3 even 1</span>
Konsep fungsi pesanan tinggi adalah popular di Python, sama seperti dalam bahasa lain. Mereka adalah fungsi yang menerima fungsi lain sebagai hujah dan juga mengembalikan fungsi sebagai output.
Dalam Python, fungsi pesanan yang lebih tinggi mengambil dua argumen: fungsi, dan ia boleh dimakan. Hujah fungsi digunakan untuk setiap item dalam objek yang boleh dimakan. Oleh kerana kita boleh lulus fungsi sebagai hujah kepada fungsi pesanan yang lebih tinggi, kita sama-sama boleh lulus dalam fungsi lambda.
Berikut adalah beberapa contoh fungsi lambda yang digunakan dengan fungsi peta ():
<span>lambda arguments : expression</span>
add_number <span>= lambda x, y : x + y </span><span>print(add_number(10, 4)) </span><span>>>>> </span><span>14</span>
Berikut adalah beberapa fungsi lambda yang digunakan dengan fungsi penapis ():
discounted_price <span>= lambda price, discount = 0.1, vat = 0.02 : price * (1 - discount) * (1 + vat) </span> <span>print(discounted_price(1000, vat=0.04, discount=0.3)) </span><span>>>>> </span><span>728.0</span>
<span>print((lambda x, y: x - y)(45, 18)) </span><span>>>>> </span><span>27</span>
Berikut adalah beberapa fungsi lambda yang digunakan dengan fungsi mengurangkan ():
my_list <span>= [(lambda x: x * 2)(x) for x in range(10) if x % 2 == 0] </span><span>print(my_list) </span><span>>>>> </span><span>[0, 4, 8, 12, 16]</span>
value <span>= [(lambda x: x % 2 and 'odd' or 'even')(x) for x in my_list] </span><span>print(value) </span><span>>>>> </span><span>['even', 'even', 'even', 'even', 'even']</span>
Walaupun python lambdas dapat mengurangkan jumlah baris kod yang anda tulis, mereka harus digunakan dengan berhati -hati dan hanya apabila perlu. Kebolehbacaan kod anda harus diprioritaskan atas kesimpulan. Untuk lebih banyak kod yang boleh dibaca, selalu gunakan fungsi normal di mana sesuai dengan fungsi Lambda, seperti yang disyorkan oleh Panduan Gaya Python.
Lambdas boleh menjadi sangat berguna dengan ekspresi ternary python, tetapi sekali lagi, cuba untuk tidak mengorbankan kebolehbacaan. Fungsi Lambda benar-benar datang ke dalam mereka sendiri apabila fungsi pesanan lebih tinggi digunakan.
Secara ringkas: Kandungan yang berkaitan: Dalam Python, fungsi lambda adalah fungsi tanpa nama, kecil, dan inline yang ditakrifkan menggunakan kata kunci Lambda. Ia sering digunakan untuk operasi jangka pendek di mana definisi fungsi penuh tidak perlu.
Soalan Lazim Mengenai Python Lambdas
Apakah fungsi lambda dalam Python? Fungsi Lambda tidak dikenali dan biasanya digunakan untuk operasi pendek, satu kali. Fungsi tetap ditakrifkan menggunakan kata kunci DEF dan boleh mempunyai pelbagai ungkapan dan pernyataan. Fungsi lambda lambda sesuai untuk operasi pendek, mudah, terutamanya apabila anda memerlukan fungsi untuk tempoh yang singkat dan tidak mahu secara rasmi menentukannya menggunakan def. fungsi?
Fungsi Lambda terhad kerana mereka hanya boleh mengandungi satu ungkapan. Mereka tidak boleh memasukkan pernyataan atau kod multiline. Bolehkah saya menggunakan fungsi lambda untuk operasi kompleks? Walaupun fungsi Lambda direka untuk kesederhanaan, mereka boleh melakukan operasi kompleks dalam kekangan ungkapan tunggal. Walau bagaimanapun, untuk logik yang lebih lanjutan dan kompleks, lebih baik menggunakan fungsi biasa.
Atas ialah kandungan terperinci Panduan untuk fungsi python lambda, dengan contoh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!