Scope, Lambda & Fungsi Tingkat Tinggi

Aturan LEGB, function anonim, serta map, filter, dan sorted dengan key.

Part 15 dari 24 ± 40 menit Gratis

Scope: di mana sebuah nama berlaku

Variable hanya terlihat di dalam bagian kode tempat ia dibuat. Python mencari nama dengan aturan LEGB:

  1. Local: di dalam function saat ini.
  2. Enclosing: di function pembungkus (untuk function bersarang).
  3. Global: tingkat atas file.
  4. Built-in: nama bawaan seperti len, print, range.
x = "global"

def luar():
    y = "enclosing"
    def dalam():
        z = "local"
        print(x, y, z)     # semua terlihat
    dalam()

luar()

Membaca vs mengubah variable global

Membaca variable global dari function itu boleh. Memberi nilai baru membuat variable lokal baru:

hitung = 0
def tambah():
    hitung = hitung + 1    # UnboundLocalError!

def tambah_global():
    global hitung
    hitung += 1            # butuh kata kunci global

Sebisa mungkin hindari global; kirim nilai lewat parameter dan kembalikan hasilnya.

nonlocal pada function bersarang

def penghitung():
    n = 0
    def tambah():
        nonlocal n
        n += 1
        return n
    return tambah

c = penghitung()
print(c(), c(), c())       # 1 2 3

Inilah closure: function dalam yang mengingat variable dari function luar.

Lambda: function mini

lambda parameter: ekspresi membuat function anonim satu ekspresi.

kuadrat = lambda n: n * n
print(kuadrat(6))          # 36

Paling berguna sebagai argumen untuk function lain. Untuk logika lebih dari satu ekspresi, gunakan def.

map, filter, sorted

angka = [1, 2, 3, 4, 5, 6]

list(map(lambda n: n * 10, angka))          # [10, 20, ..., 60]
list(filter(lambda n: n % 2 == 0, angka))   # [2, 4, 6]

map mengubah setiap elemen, filter menyaring elemen. (Comprehension di bab berikut sering lebih mudah dibaca.)

sorted dengan key

key= menentukan nilai apa yang dipakai untuk mengurutkan:

kata = ["pisang", "ara", "jeruk", "kiwi"]
sorted(kata)                       # urut abjad
sorted(kata, key=len)              # urut panjang: ['ara', 'kiwi', 'jeruk', 'pisang']
sorted(kata, key=lambda s: s[-1])  # urut huruf terakhir

siswa = [("Ani", 80), ("Budi", 95)]
sorted(siswa, key=lambda s: s[1], reverse=True)

min() dan max() juga menerima key=.

any dan all

any(n > 5 for n in angka)     # adakah yang > 5?
all(n > 0 for n in angka)     # apakah semuanya > 0?

Fungsi sebagai nilai

Function adalah objek biasa: boleh disimpan di variable, dimasukkan ke list/dict, dan dikirim sebagai argumen.

operasi = {"tambah": lambda a, b: a + b, "kali": lambda a, b: a * b}
print(operasi["kali"](3, 4))   # 12

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X