tolong jelaskan cara kerja lambda [duplikat]

Kemungkinan Duplikat:
Apa itu lambda dan apa contoh implementasinya?

Berikut ini kode untuk lambda (dari Byte of Python):

def make_repeater(n):
    return lambda s: s * n

twice = make_repeater(2)

print twice('word')
print twice(5)

Outputnya adalah ini:

wordword
10

Bisakah seseorang menjelaskan cara kerja lambda dalam bentuk panjang? bagaimana word dan 5 diteruskan ke s dalam fungsi lambda?

terima kasih.


person dopatraman    schedule 30.12.2011    source sumber
comment
Kerja bagus mengajukan pertanyaan yang lebih baik daripada kemungkinan pertanyaan rangkap, tetapi jawaban pertama cukup mengagumkan.   -  person sarnold    schedule 31.12.2011
comment
Saya pikir saya akan mendapatkan kesalahan mental stack overflow karena berulang menjadi pertanyaan duplikat...   -  person Brigand    schedule 31.12.2011
comment
Lihat memahami-fungsi lambda dengan python   -  person nawfal    schedule 04.07.2014


Jawaban (2)


Seperti yang sudah dijelaskan Jake, make_repeater Anda mengembalikan fungsi lain dengan n terikat ke 2 (ini disebut penutupan). Jadi kode Anda kira-kira setara dengan:

twice = lambda s: s * 2

print twice('word')
print twice(5)

Yang pada gilirannya kira-kira setara dengan:

def twice(s):
    return s * 2

print twice('word')
print twice(5)

Yang pada gilirannya kira-kira setara dengan:

print 'word' * 2
print 5 * 2

Jadi yang sebenarnya Anda lakukan adalah:

  • evaluasi ekspresi 'word' * 2, yang menghasilkan 'wordword' (perkalian string didefinisikan oleh Python sebagai pengulangan string beberapa kali)
  • evaluasi ekspresi 5 * 2, yang menghasilkan 10 (ini seharusnya tidak mengejutkan Anda)

Fakta bahwa fungsi lambda Anda tidak peduli dengan tipe argumennya dan secara dinamis memutuskan saat runtime metode perkalian mana yang benar, disebut pengetikan dinamis.

person Niklas B.    schedule 30.12.2011

Fungsi make_repeater mengembalikan fungsi lain (lambda). Dalam contoh Anda, fungsi lambda diberi nama "dua kali". Lambda memiliki satu argumen, "s", dan satu nilai "statis", "n" - "n" ditentukan saat lambda dibuat (dalam hal ini, ditetapkan ke "2"). Nilai "s" ditentukan saat lambda dipanggil - baik "word" atau 5. word * 2 = "wordword" dan 5 * 2 = 10.

person Jake Feasel    schedule 30.12.2011