Fungsi Python Lambda dengan CONTOH

Isi kandungan:

Anonim

Apakah Fungsi Lambda di Python?

A Fungsi Lambda dalam Python pengaturcaraan adalah fungsi tanpa nama atau fungsi yang tidak mempunyai nama. Ini adalah fungsi kecil dan terhad yang tidak lebih dari satu baris. Sama seperti fungsi biasa, fungsi Lambda boleh mempunyai banyak argumen dengan satu ungkapan.

Dalam Python, ungkapan lambda (atau bentuk lambda) digunakan untuk membina fungsi tanpa nama. Untuk melakukannya, anda akan menggunakan kata kunci lambda (sama seperti anda menggunakan def untuk menentukan fungsi normal). Setiap fungsi tanpa nama yang anda tentukan dalam Python akan mempunyai 3 bahagian penting:

  • Kata kunci lambda.
  • Parameter (atau pemboleh ubah terikat), dan
  • Badan berfungsi.

Fungsi lambda dapat memiliki sejumlah parameter, tetapi fungsi badan hanya dapat berisi satu ekspresi. Lebih-lebih lagi, lambda ditulis dalam satu baris kod dan juga dapat dipanggil dengan segera. Anda akan melihat semua ini dalam tindakan dalam contoh yang akan datang.

Dalam tutorial Lambda in Python ini, anda akan belajar:

  • Sintaks dan Contohnya
  • Menggunakan lambdas dengan built-in Python
  • lambdas dalam penapis ()
  • lambdas dalam peta ()
  • lambdas dalam mengurangkan ()
  • Mengapa (dan mengapa tidak) menggunakan fungsi lambda?
  • Fungsi Lambdas vs Biasa

Sintaks dan Contohnya

Sintaks formal untuk menulis fungsi lambda adalah seperti yang diberikan di bawah:

lambda p1, p2: expression 

Di sini, p1 dan p2 adalah parameter yang diteruskan ke fungsi lambda. Anda boleh menambah seberapa banyak atau sedikit parameter yang anda perlukan.

Namun, perhatikan bahawa kita tidak menggunakan tanda kurung di sekitar parameter seperti yang kita lakukan dengan fungsi biasa. Bahagian terakhir (ekspresi) adalah ungkapan python yang sah yang beroperasi pada parameter yang anda berikan untuk fungsi tersebut.

Contoh 1

Sekarang setelah anda mengetahui tentang lambda, mari kita mencuba dengan contoh. Oleh itu, buka IDLE anda dan taipkan perkara berikut:

adder = lambda x, y: x + yprint (adder (1, 2))

Inilah outputnya:

3

Penjelasan Kod

Di sini, kami menentukan pemboleh ubah yang akan menahan hasil yang dikembalikan oleh fungsi lambda.

1. Kata kunci lambda digunakan untuk menentukan fungsi tanpa nama.

2. x dan y adalah parameter yang kita sampaikan ke fungsi lambda.

3. Ini adalah badan fungsi, yang menambah 2 parameter yang kita lalui. Perhatikan bahawa ia adalah ungkapan tunggal. Anda tidak boleh menulis banyak pernyataan dalam badan fungsi lambda.

4. Kami memanggil fungsi dan mencetak nilai yang dikembalikan.

Contoh 2

Itu adalah contoh asas untuk memahami asas dan sintaks lambda. Mari sekarang cuba mencetak lambda dan melihat hasilnya. Sekali lagi, buka IDLE anda dan taipkan perkara berikut:

#What a lambda returnsstring='some kind of a useless lambda'print(lambda string : print(string))

Sekarang simpan fail anda dan tekan F5 untuk menjalankan program. Ini adalah output yang harus anda perolehi.

Pengeluaran:

 at 0x00000185C3BF81E0>

Apa yang berlaku di sini? Mari lihat kod untuk memahami lebih lanjut.

Penjelasan Kod

  1. Di sini, kami menentukan rentetan yang akan anda sampaikan sebagai parameter ke lambda.
  2. Kami menyatakan lambda yang memanggil pernyataan cetak dan mencetak hasilnya.

Tetapi mengapa program tidak mencetak rentetan yang kami lalui? Ini kerana lambda itu sendiri mengembalikan objek fungsi. Dalam contoh ini, lambda tidak dipanggil oleh fungsi cetak tetapi hanya mengembalikan objek fungsi dan lokasi memori di mana ia disimpan. Itulah yang dicetak di konsol.

Contoh 3

Walau bagaimanapun, jika anda menulis program seperti ini:

#What a lambda returns #2x="some kind of a useless lambda"(lambda x : print(x))(x)

Dan jalankan dengan menekan F5, anda akan melihat output seperti ini.

Pengeluaran:

some kind of a useless lambda

Sekarang, lambda dipanggil, dan rentetan yang kami lalui dicetak di konsol. Tetapi apakah sintaks pelik itu, dan mengapa definisi lambda diliputi dalam tanda kurung? Mari fahami sekarang.

Penjelasan Kod

  1. Berikut adalah rentetan yang sama yang kami tetapkan dalam contoh sebelumnya.
  2. Di bahagian ini, kami mendefinisikan lambda dan memanggilnya dengan segera dengan meneruskan rentetan sebagai argumen. Ini adalah sesuatu yang dipanggil IIFE, dan anda akan mengetahui lebih lanjut mengenainya di bahagian tutorial ini yang akan datang.

Contoh 4

Mari kita lihat contoh terakhir untuk memahami bagaimana lambda dan fungsi biasa dilaksanakan. Oleh itu, buka IDLE anda dan dalam fail baru, taipkan perkara berikut:

#A REGULAR FUNCTIONdef guru( funct, *args ):funct( *args )def printer_one( arg ):return print (arg)def printer_two( arg ):print(arg)#CALL A REGULAR FUNCTIONguru( printer_one, 'printer 1 REGULAR CALL' )guru( printer_two, 'printer 2 REGULAR CALL \n' )#CALL A REGULAR FUNCTION THRU A LAMBDAguru(lambda: printer_one('printer 1 LAMBDA CALL'))guru(lambda: printer_two('printer 2 LAMBDA CALL'))

Sekarang, simpan fail dan tekan F5 untuk menjalankan program. Sekiranya anda tidak membuat kesilapan, outputnya mestilah seperti ini.

Pengeluaran:

pencetak 1 PANGGILAN PERATURAN

pencetak 2 PANGGILAN PERATURAN

pencetak 1 LAMBDA CALL

pencetak 2 LAMBDA CALL

Penjelasan Kod

  1. Fungsi yang disebut guru yang mengambil fungsi lain sebagai parameter pertama dan argumen lain yang mengikutinya.
  2. printer_one adalah fungsi sederhana yang mencetak parameter yang diteruskan kepadanya dan mengembalikannya.
  3. printer_two serupa dengan printer_one tetapi tanpa penyata pengembalian.
  4. Di bahagian ini, kita memanggil fungsi guru dan meneruskan fungsi pencetak dan rentetan sebagai parameter.
  5. Ini adalah sintaks untuk mencapai langkah keempat (iaitu memanggil fungsi guru) tetapi menggunakan lambdas.

Di bahagian seterusnya, anda akan belajar bagaimana menggunakan fungsi lambda dengan peta (), mengurangkan (), dan menapis () di Python.

Menggunakan lambdas dengan built-in Python

Fungsi Lambda memberikan cara yang elegan dan hebat untuk melakukan operasi menggunakan kaedah terbina dalam di Python. Ini mungkin kerana lambdas dapat dipanggil dengan segera dan disampaikan sebagai argumen kepada fungsi-fungsi ini.

IIFE di Python Lambda

IIFE bermaksud pelaksanaan fungsi yang dipanggil segera. Ini bermaksud bahawa fungsi lambda boleh dipanggil sebaik sahaja ditentukan. Mari fahami ini dengan contoh; aktifkan IDLE anda dan taipkan perkara berikut:

 (lambda x: x + x)(2) 

Berikut adalah penjelasan output dan kod:

Keupayaan lambdas untuk dipanggil dengan segera membolehkan anda menggunakannya dalam fungsi seperti peta () dan mengurangkan (). Ia berguna kerana anda mungkin tidak mahu menggunakan fungsi ini lagi.

lambdas dalam penapis ()

Fungsi penapis digunakan untuk memilih beberapa elemen tertentu dari urutan elemen. Urutannya boleh berupa iterator seperti senarai, set, tuple, dll.

Elemen-elemen yang akan dipilih adalah berdasarkan beberapa kekangan yang telah ditentukan. Ia memerlukan 2 parameter:

  • Fungsi yang menentukan kekangan penapisan
  • Urutan (iterator seperti senarai, tupel, dll.)

Sebagai contoh,

sequences = [10,2,8,7,5,4,3,11,0, 1]filtered_result = filter (lambda x: x > 4, sequences)print(list(filtered_result))

Inilah keluarannya:

[10, 8, 7, 5, 11]

Penjelasan Kod:

1. Dalam pernyataan pertama, kami menentukan senarai yang disebut urutan yang mengandungi beberapa nombor.

2. Di sini, kami menyatakan pemboleh ubah yang disebut filtered_result, yang akan menyimpan nilai-nilai yang ditapis yang dikembalikan oleh fungsi filter ().

3. Fungsi lambda yang dijalankan pada setiap elemen senarai dan kembali benar jika lebih besar daripada 4.

4. Cetak hasil yang dikembalikan oleh fungsi penapis.

lambdas dalam peta ()

fungsi peta digunakan untuk menerapkan operasi tertentu pada setiap elemen dalam urutan. Seperti penapis (), ia juga memerlukan 2 parameter:

  1. Fungsi yang menentukan op untuk dilakukan pada elemen
  2. Satu atau lebih urutan

Sebagai contoh, berikut adalah program yang mencetak kotak nombor dalam senarai yang diberikan:

sequences = [10,2,8,7,5,4,3,11,0, 1]filtered_result = map (lambda x: x*x, sequences)print(list(filtered_result))

Pengeluaran:

 [100, 4, 64, 49, 25, 16, 121, 0, 1]

[KR1]

Penjelasan Kod:

  1. Di sini, kami menentukan senarai yang disebut urutan yang mengandungi beberapa nombor.
  2. Kami menyatakan pemboleh ubah yang disebut filtered_result yang akan menyimpan nilai yang dipetakan
  3. Fungsi lambda yang berjalan pada setiap elemen dalam senarai dan mengembalikan segi empat nombor itu.
  4. Cetak hasil yang dikembalikan oleh fungsi peta.

lambdas dalam mengurangkan ()

Fungsi pengurangan, seperti peta (), digunakan untuk menerapkan operasi pada setiap elemen dalam urutan. Walau bagaimanapun, ia berbeza dengan peta yang berfungsi. Ini adalah langkah-langkah yang diikuti oleh fungsi mengurangi () untuk menghitung output:

Langkah 1) Lakukan operasi yang ditentukan pada 2 elemen pertama urutan.

Langkah 2) Simpan hasil ini

Langkah 3) Lakukan operasi dengan hasil yang disimpan dan elemen seterusnya mengikut urutan.

Langkah 4) Ulangi sehingga tidak ada lagi unsur yang tersisa.

Ia juga memerlukan dua parameter:

  1. Fungsi yang menentukan operasi yang akan dilakukan
  2. Urutan (iterator seperti senarai, tupel, dll.)

Sebagai contoh, berikut adalah program yang mengembalikan produk semua elemen dalam senarai:

from functools import reducesequences = [1,2,3,4,5]product = reduce (lambda x, y: x*y, sequences)print(product)

Inilah outputnya:

120

Penjelasan Kod:

  1. Kekurangan import dari modul functools
  2. Di sini, kami menentukan senarai yang disebut urutan yang mengandungi beberapa nombor.
  3. Kami menyatakan pemboleh ubah yang disebut produk yang akan menyimpan nilai yang dikurangkan
  4. Fungsi lambda yang dijalankan pada setiap elemen senarai. Ia akan mengembalikan produk nombor tersebut seperti hasil sebelumnya.
  5. Cetak hasil yang dikembalikan oleh fungsi pengurangan.

Mengapa (dan mengapa tidak) menggunakan fungsi lambda?

Seperti yang akan anda lihat di bahagian seterusnya, lambdas diperlakukan sama dengan fungsi biasa pada tahap jurubahasa. Anda boleh mengatakan bahawa lambdas menyediakan sintaks yang ringkas untuk fungsi penulisan yang mengembalikan satu ungkapan.

Walau bagaimanapun, anda harus tahu bila adalah idea yang baik untuk menggunakan lambdas dan kapan untuk mengelakkannya. Di bahagian ini, anda akan mempelajari beberapa prinsip reka bentuk yang digunakan oleh pemaju python semasa menulis lambda.

Salah satu kes penggunaan yang paling biasa untuk lambdas adalah dalam pengaturcaraan fungsional kerana Python menyokong paradigma (atau gaya) pengaturcaraan yang dikenali sebagai pengaturcaraan fungsional.

Ini memungkinkan anda menyediakan fungsi sebagai parameter untuk fungsi lain (misalnya, dalam peta, penapis, dll.). Dalam kes sedemikian, menggunakan lambdas menawarkan cara yang elegan untuk membuat fungsi satu kali dan meneruskannya sebagai parameter.

Bilakah anda tidak boleh menggunakan Lambda?

Anda tidak boleh menulis fungsi lambda yang rumit dalam persekitaran pengeluaran. Sangat sukar bagi pengekod yang mengekalkan kod anda untuk menyahsulitkannya. Sekiranya anda membuat ungkapan satu-pelapik yang rumit, akan menjadi amalan yang lebih unggul untuk menentukan fungsi yang betul. Sebagai amalan terbaik, anda perlu ingat bahawa kod mudah selalu lebih baik daripada kod kompleks.

Fungsi Lambdas vs Biasa

Seperti yang dinyatakan sebelumnya, lambdas hanya berfungsi [vV4] [J5] yang tidak mempunyai pengenal yang terikat padanya. Dengan kata yang lebih mudah, fungsi itu tanpa nama (oleh itu, tanpa nama). Berikut adalah jadual untuk menggambarkan perbezaan antara lambda dan fungsi biasa di python.

Lambdas

Fungsi Biasa

Sintaks:

lambda x : x + x 

Sintaks:

def (x) :return x + x

Fungsi lambda hanya boleh mempunyai satu ekspresi di dalam badan mereka.

Fungsi biasa boleh mempunyai banyak ungkapan dan pernyataan dalam badan mereka.

Lambdas tidak mempunyai nama yang berkaitan dengan mereka. Itulah sebabnya mereka juga dikenali sebagai fungsi tanpa nama.

Fungsi biasa mesti mempunyai nama dan tandatangan.

Lambdas tidak mengandungi pernyataan pengembalian kerana mayat dikembalikan secara automatik.

Fungsi yang perlu mengembalikan nilai harus merangkumi penyataan kembali.

Penjelasan perbezaannya?

Perbezaan utama antara lambda dan fungsi biasa adalah bahawa fungsi lambda hanya menilai satu ekspresi dan menghasilkan objek fungsi. Oleh itu, kita dapat menamakan hasil fungsi lambda dan menggunakannya dalam program kita seperti yang kita lakukan pada contoh sebelumnya.

Fungsi biasa untuk contoh di atas akan kelihatan seperti ini:

def adder (x, y):return x + yprint (adder (1, 2))

Di sini, kita harus menentukan nama untuk fungsi yang mengembalikan hasilnya ketika kita menyebutnya . Fungsi lambda tidak mengandungi pernyataan pengembalian kerana hanya akan mempunyai satu ungkapan yang selalu dikembalikan secara lalai. Anda juga tidak perlu menetapkan lambda kerana ia boleh segera dipanggil (lihat bahagian seterusnya). Seperti yang anda lihat dalam contoh berikut, lambdas menjadi sangat kuat ketika kita menggunakannya dengan fungsi terpasang Python.

Namun, anda mungkin masih tertanya-tanya bagaimana lambdas berbeza dengan fungsi yang mengembalikan satu ungkapan (seperti yang ada di atas). Di peringkat pentafsir, tidak banyak perbezaan. Mungkin terdengar mengejutkan, tetapi fungsi lambda yang anda tentukan dalam Python dianggap sebagai fungsi normal oleh jurubahasa.

Seperti yang anda lihat dalam rajah, kedua definisi ditangani dengan cara yang sama oleh jurubahasa python ketika ditukarkan ke kod bytec. Sekarang, anda tidak dapat menamakan fungsi lambda kerana ia dikhaskan oleh Python, tetapi nama fungsi lain akan menghasilkan bytecode yang sama [KR6].

Ringkasan

  • Lambdas, juga dikenali sebagai fungsi tanpa nama, adalah fungsi kecil dan terhad yang tidak memerlukan nama (iaitu pengecam).
  • Setiap fungsi lambda di Python mempunyai 3 bahagian penting:
  • Kata kunci lambda.
  • Parameter (atau pemboleh ubah terikat), dan
  • Badan berfungsi.
  • Sintaks untuk menulis lambda adalah: lambda parameter: expression
  • Lambdas dapat memiliki sejumlah parameter, tetapi tidak tertutup kurung
  • Lambda hanya boleh mempunyai 1 ungkapan dalam badan fungsinya, yang dikembalikan secara lalai.
  • Pada tahap bytecode, tidak banyak perbezaan antara cara lambda dan fungsi biasa dikendalikan oleh jurubahasa.
  • Lambdas menyokong IIFE melalui sintaks ini: (parameter lambda: expression) (argumen)
  • Lambdas biasanya digunakan dengan built-in python berikut:
  • Penapis: penapis (parameter lambda: ungkapan, urutan berulang)
  • Peta: peta (parameter lambda: ungkapan, urutan berulang)
  • Kurangkan: kurangkan (parameter lambda1, parameter2: ekspresi, urutan berulang)
  • Jangan menulis fungsi lambda yang rumit dalam persekitaran pengeluaran kerana sukar bagi penyelenggara kod.

[J5] Saya telah menambahkan jadual, tetapi penjelasannya diperlukan untuk memahami perbezaannya.