Blog KaryaVirtual

Gudang Pengetahuan Digital

Fungsi Python Lambda

January 22, 2020 Learn Python 0

Apa itu Lambda?

Lambdas, juga dikenal sebagai fungsi anonim, kecil, terbatas yang tidak memerlukan nama (yaitu, pengenal). Fungsi Lambda pertama kali diperkenalkan ke bidang matematika oleh Gereja Alonzo pada 1930-an.

Saat ini, banyak bahasa pemrograman modern seperti Java, Python, C #, dan C ++ mendukung fungsi lambda untuk menambahkan fungsionalitas ke bahasa.

Dalam tutorial Lambda ini, Anda akan belajar:

  • Apa itu Lambda?
  • Lambdas dengan Python
  • Sintaks dan Contoh
  • Menggunakan lambdas dengan built-in Python
  • lambdas dalam filter ()
  • lambdas di peta ()
  • lambdas dalam mengurangi ()
  • Mengapa (dan mengapa tidak) menggunakan fungsi lambda?
  • Lambdas vs fungsi Reguler

Lambdas dengan Python

Dalam Python, ekspresi lambda (atau bentuk lambda) digunakan untuk membangun fungsi anonim. Untuk melakukannya, Anda akan menggunakan kata kunci lambda (sama seperti Anda menggunakan def untuk mendefinisikan fungsi normal).

Setiap fungsi anonim yang Anda tetapkan dalam Python akan memiliki 3 bagian penting:

  • Kata kunci lambda.
  • Parameter (atau variabel terikat), dan
  • Fungsi tubuh.

Fungsi lambda dapat memiliki sejumlah parameter, tetapi fungsi tubuh hanya dapat berisi satu ekspresi.

Selain itu, lambda ditulis dalam satu baris kode dan juga dapat dipanggil segera. Anda akan melihat semua ini beraksi dalam contoh yang akan datang.

Sintaks dan Contoh

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

  lambda p1, p2: ekspresi 

Di sini, p1 dan p2 adalah parameter yang diteruskan ke fungsi lambda. Anda dapat menambahkan sebanyak atau beberapa parameter yang Anda butuhkan.

Namun, perhatikan bahwa Kita tidak menggunakan tanda kurung di sekitar parameter seperti yang kami lakukan dengan fungsi biasa. Bagian terakhir (ekspresi) adalah ekspresi python yang valid yang beroperasi pada parameter yang Anda berikan ke fungsi.

Contoh 1

Sekarang setelah Anda tahu tentang lambdas, mari kita coba dengan sebuah contoh. Jadi, buka IDE Anda dan ketikkan yang berikut ini:

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

Berikut hasilnya:

  3 

Penjelasan Kode

Di sini, kita mendefinisikan variabel yang akan menahan hasil yang dikembalikan oleh fungsi lambda.

1. Kata kunci lambda digunakan untuk mendefinisikan fungsi anonim.

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

3. Ini adalah badan fungsi, yang menambahkan 2 parameter yang kami lewati. Perhatikan bahwa ini adalah ekspresi tunggal. Anda tidak dapat menulis banyak pernyataan dalam tubuh fungsi lambda.

4. Kami memanggil fungsi dan mencetak nilai yang dikembalikan. Contoh 2

Itu adalah contoh dasar untuk memahami dasar-dasar dan sintaksis lambda. Sekarang mari kita mencoba untuk mencetak lambda dan lihat hasilnya. Sekali lagi, buka IDLE Anda dan ketikkan yang berikut:

 #Apa lambda kembali
 string = 'semacam lambda yang tidak berguna'
 print (lambda string: print (string))

Sekarang simpan file Anda dan tekan F5 untuk menjalankan program. Ini adalah output yang harus Anda dapatkan.

Keluaran:

 <fungsi <lambda> pada 0x00000185C3BF81E0>

Apa yang sedang terjadi disini? Mari kita lihat kode untuk memahami lebih jauh.

Penjelasan Kode

  1. Di sini, kami mendefinisikan string yang akan Anda berikan sebagai parameter ke lambda.
  2. Kami mendeklarasikan lambda yang menyebut pernyataan cetak dan mencetak hasilnya.

Tetapi mengapa program tidak mencetak string yang kami lewati? Ini karena 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

Namun, jika Anda menulis program seperti ini:

 #Apa lambda mengembalikan # 2
 x = "semacam lambda yang tidak berguna"
 (lambda x: cetak (x)) (x)

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

Keluaran:

  semacam lambda yang tidak berguna 

Sekarang, lambda dipanggil, dan string yang kami lewati akan dicetak di konsol. Tapi apa sintaksis aneh itu, dan mengapa definisi lambda tercakup dalam tanda kurung? Mari kita pahami itu sekarang.

Penjelasan Kode

  1. Berikut adalah string yang sama yang kami definisikan dalam contoh sebelumnya.
  2. Pada bagian ini, kita mendefinisikan lambda dan memanggilnya segera dengan melewatkan string sebagai argumen. Ini adalah sesuatu yang disebut IIFE, dan Anda akan mempelajarinya lebih lanjut di bagian selanjutnya dari tutorial ini.

Contoh 4

Mari kita lihat contoh terakhir untuk memahami bagaimana lambda dan fungsi reguler dijalankan. Jadi, buka IDLE Anda dan dalam file baru, ketikkan yang berikut:

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

Sekarang, simpan file dan tekan F5 untuk menjalankan program. Jika Anda tidak melakukan kesalahan, hasilnya harus seperti ini.

Keluaran:

printer 1 PANGGILAN REGULER

printer 2 PANGGILAN REGULER

printer 1 PANGGILAN LAMBDA

printer 2 PANGGILAN LAMBDA

Penjelasan Kode

  1. Fungsi yang disebut guru yang menggunakan fungsi lain sebagai parameter pertama dan argumen lain yang mengikutinya.
  2. printer_one adalah fungsi sederhana yang mencetak parameter yang diteruskan ke sana dan mengembalikannya.
  3. printer_two mirip dengan printer_one tetapi tanpa pernyataan kembali.
  4. Pada bagian ini, kita memanggil fungsi guru dan meneruskan fungsi printer dan string sebagai parameter.
  5. Ini adalah sintaks untuk mencapai langkah keempat (yaitu, memanggil fungsi guru) tetapi menggunakan lambdas.

Di bagian selanjutnya, Anda akan belajar cara menggunakan fungsi lambda dengan map (), kurangi (), dan filter () dengan Python.

Menggunakan lambdas dengan built-in Python

Fungsi Lambda menyediakan cara yang elegan dan kuat untuk melakukan operasi menggunakan metode bawaan dengan Python. Hal ini dimungkinkan karena lambdas dapat dipanggil segera dan diteruskan sebagai argumen untuk fungsi-fungsi ini.

IIFE dalam Python Lambda

IIFE adalah singkatan dari eksekusi fungsi yang segera dipanggil. Ini berarti bahwa fungsi lambda dapat dipanggil segera setelah didefinisikan. Mari kita pahami ini dengan sebuah contoh; jalankan IDLE Anda dan ketikkan yang berikut ini:

  (lambda x: x + x) (2) 

Berikut ini adalah output dan penjelasan kode:

Kemampuan lambdas ini untuk dipanggil segera memungkinkan Anda untuk menggunakannya di dalam fungsi-fungsi seperti peta () dan mengurangi (). Ini berguna karena Anda mungkin tidak ingin menggunakan fungsi-fungsi ini lagi.

Lambdas dalam filter ()

Fungsi filter digunakan untuk memilih beberapa elemen tertentu dari urutan elemen. Urutan dapat berupa iterator seperti daftar, set, tupel, dll.

Elemen-elemen yang akan dipilih didasarkan pada beberapa batasan yang telah ditentukan sebelumnya. Dibutuhkan 2 parameter:

  • Fungsi yang mendefinisikan batasan filtering
  • Urutan (setiap iterator seperti daftar, tupel, dll.)

Sebagai contoh,

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

Inilah hasilnya:

  [10, 8, 7, 5, 11] 

Penjelasan Kode:

1. Dalam pernyataan pertama, kita mendefinisikan daftar yang disebut urutan yang berisi beberapa angka.

2. Di sini, kami mendeklarasikan variabel yang disebut filtered_result, yang akan menyimpan nilai yang difilter yang dikembalikan oleh fungsi filter ().

3. Fungsi lambda yang berjalan pada setiap elemen daftar dan mengembalikan true jika lebih besar dari 4.

4. Cetak hasil yang dikembalikan oleh fungsi filter.

Lambdas di peta ()

fungsi peta digunakan untuk menerapkan operasi tertentu ke setiap elemen secara berurutan. Seperti filter (), ia juga membutuhkan 2 parameter:

  1. Suatu fungsi yang mendefinisikan operasi untuk melakukan pada elemen
  2. Satu atau lebih urutan

Misalnya, berikut adalah program yang mencetak kuadrat angka dalam daftar yang diberikan:

 urutan = [10,2,8,7,5,4,3,11,0, 1]
 filtered_result = peta (lambda x: x * x, urutan) 
 print (daftar (filtered_result))

Keluaran:

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

[KR1]

Penjelasan Kode:

  1. Di sini, kita mendefinisikan daftar yang disebut urutan yang berisi beberapa angka.
  2. Kami mendeklarasikan variabel yang disebut filtered_result yang akan menyimpan nilai yang dipetakan
  3. Fungsi lambda yang berjalan pada setiap elemen daftar dan mengembalikan kuadrat dari angka itu.
  4. Cetak hasil yang dikembalikan oleh fungsi peta.

Lambdas dalam mengurangi [vV2] [J3] ()

Fungsi pengurangan, seperti map (), digunakan untuk menerapkan operasi ke setiap elemen secara berurutan. Namun, ini berbeda dari peta dalam pengerjaan. Ini adalah langkah-langkah yang diikuti oleh fungsi reduction () untuk menghitung output:

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

Langkah 2) Simpan hasil ini

Langkah 3) Lakukan operasi dengan hasil yang disimpan dan elemen berikutnya dalam urutan.

Langkah 4) Ulangi sampai tidak ada lagi elemen yang tersisa.

Ini juga membutuhkan dua parameter:

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

Misalnya, berikut adalah program yang mengembalikan produk semua elemen dalam daftar:

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

Berikut hasilnya:

  120 

Penjelasan Kode:

  1. Impor berkurang dari modul functools
  2. Di sini, kita mendefinisikan daftar yang disebut urutan yang berisi beberapa angka.
  3. Kami mendeklarasikan variabel yang disebut produk yang akan menyimpan nilai yang dikurangi
  4. Fungsi lambda yang berjalan pada setiap elemen daftar. Ini akan mengembalikan produk nomor itu sesuai hasil sebelumnya.
  5. Cetak hasil yang dikembalikan oleh fungsi pengurangan.

Mengapa (dan mengapa tidak) menggunakan fungsi lambda?

Seperti yang akan Anda lihat di bagian selanjutnya, lambdas diperlakukan sama dengan fungsi biasa di tingkat juru bahasa. Di satu sisi, Anda dapat mengatakan bahwa lambdas menyediakan sintaks yang ringkas untuk fungsi penulisan yang mengembalikan satu ekspresi.

Namun, Anda harus tahu kapan sebaiknya menggunakan lambdas dan kapan harus menghindarinya. Di bagian ini, Anda akan mempelajari beberapa prinsip desain yang digunakan oleh pengembang python saat menulis lambdas.

Salah satu kasus penggunaan yang paling umum untuk lambdas adalah pemrograman fungsional karena Python mendukung paradigma (atau gaya) pemrograman yang dikenal sebagai pemrograman fungsional.

Ini memungkinkan Anda untuk menyediakan fungsi sebagai parameter ke fungsi lain (misalnya, di peta, filter, dll.). Dalam kasus seperti itu, menggunakan lambdas menawarkan cara yang elegan untuk membuat fungsi satu kali dan meneruskannya sebagai parameter.

Kapan sebaiknya Anda tidak menggunakan Lambda?

Anda tidak boleh menulis fungsi lambda yang rumit di lingkungan produksi. Akan sangat sulit bagi pembuat kode yang menjaga kode Anda untuk mendekripsi. Jika Anda menemukan diri Anda membuat ekspresi satu-liner yang kompleks, itu akan menjadi praktik yang jauh lebih unggul untuk mendefinisikan fungsi yang tepat. Sebagai praktik terbaik, Anda harus ingat bahwa kode sederhana selalu lebih baik daripada kode kompleks.

Lambdas vs fungsi Reguler

Seperti yang dinyatakan sebelumnya, lambdas adalah [vV4] [J5] hanya fungsi yang tidak memiliki pengenal terikat padanya. Dengan kata sederhana, mereka adalah fungsi tanpa nama (karenanya, anonim). Berikut ini adalah tabel untuk menggambarkan perbedaan antara lambda dan fungsi reguler dalam python.

Lambdas

Fungsi Biasa

Sintaksis:

  lambda x: x + x 

Sintaksis:

 def (x):
 return x + x 

Fungsi Lambda hanya dapat memiliki satu ekspresi di tubuhnya.

Fungsi reguler dapat memiliki banyak ekspresi dan pernyataan dalam tubuh mereka.

Lambdas tidak memiliki nama yang dikaitkan dengan mereka. Itu sebabnya mereka juga dikenal sebagai fungsi anonim.

Fungsi reguler harus memiliki nama dan tanda tangan.

Lambdas tidak mengandung pernyataan kembali karena tubuh secara otomatis dikembalikan.

Fungsi yang perlu mengembalikan nilai harus mencakup pernyataan pengembalian.

Penjelasan perbedaan?

Perbedaan utama antara lambda dan fungsi reguler adalah bahwa fungsi lambda hanya mengevaluasi satu ekspresi dan menghasilkan objek fungsi. Sebagai akibatnya, kita dapat memberi nama hasil fungsi lambda dan menggunakannya dalam program kita seperti yang kita lakukan pada contoh sebelumnya.

Fungsi reguler untuk contoh di atas akan terlihat seperti ini:

 def adder (x, y):
 kembali x + y 
 cetak (penambah (1, 2))

Di sini, kita harus mendefinisikan nama untuk fungsi yang mengembalikan hasilnya ketika kita menyebutnya . Fungsi lambda tidak mengandung pernyataan kembali karena hanya memiliki satu ekspresi yang selalu dikembalikan secara default. Anda bahkan tidak perlu menetapkan lambda karena dapat langsung dipanggil (lihat bagian berikutnya). Seperti yang akan Anda lihat dalam contoh berikut, lambda menjadi sangat kuat ketika kita menggunakannya dengan fungsi bawaan Python.

Namun, Anda mungkin masih bertanya-tanya bagaimana lambda berbeda dari fungsi yang mengembalikan satu ekspresi (seperti yang di atas). Pada level interpreter, tidak ada banyak perbedaan. Mungkin terdengar mengejutkan, tetapi fungsi lambda apa pun yang Anda tetapkan dalam Python diperlakukan sebagai fungsi normal oleh penerjemah.

Seperti yang dapat Anda lihat dalam diagram, kedua definisi tersebut ditangani dengan cara yang sama oleh juru bahasa python ketika dikonversi menjadi bytecode. Sekarang, Anda tidak dapat menamai fungsi lambda karena dicadangkan oleh Python, tetapi nama fungsi lainnya akan menghasilkan bytecode yang sama [KR6].

Ringkasan

  • Lambdas, juga dikenal sebagai fungsi anonim, adalah fungsi kecil, terbatas yang tidak memerlukan nama (yaitu, pengenal).
  • Setiap fungsi lambda dalam Python memiliki 3 bagian penting:
  • Kata kunci lambda.
  • Parameter (atau variabel terikat), dan
  • Fungsi tubuh.
  • Sintaks untuk menulis lambda adalah: parameter lambda: ekspresi
  • Lambdas dapat memiliki sejumlah parameter, tetapi mereka tidak tertutup dalam kurung kurawal
  • Sebuah lambda hanya dapat memiliki 1 ekspresi di badan fungsinya, yang dikembalikan secara default.
  • Pada level bytecode, tidak ada banyak perbedaan antara bagaimana lambdas dan fungsi-fungsi reguler ditangani oleh interpreter.
  • Lambdas mendukung IIFE melalui sintaks ini: (parameter lambda: ekspresi) (argumen)
  • Lambdas umumnya digunakan dengan built-in python berikut:
  • Filter: filter (parameter lambda: ekspresi, iterable-sequence)
  • Peta: peta (parameter lambda: ekspresi, urutan-iterable)
  • Kurangi: kurangi (lambda parameter1, parameter2: ekspresi, iterable-sequence)
  • Jangan menulis fungsi lambda yang rumit di lingkungan produksi karena akan sulit bagi pengelola kode.

[J5] Saya sudah menambahkan tabel, tapi penjelasannya perlu untuk memahami perbedaannya.

[vV4] Letakkan bagian ini di fomat tabel. Lihat tautan ini: https://www.guru99.com/call-by-value-vs-call-by-reference.html tambahkan lebih banyak poin di bagian ini.

[J3] Itu di bawah penjelasan

[vV2] Gambar tidak ada di bagian ini.

[KR1] Tidak ingin gambar kode … cukup tempel output pada tag pra … lakukan di mana-mana

[KR6] Tambahkan lebih banyak contoh karena kami ingin jumlah kata menjadi 2300+

Leave a Reply

Your email address will not be published. Required fields are marked *