2.14. Mendefinisikan fungsi

Sebuah fungsi membungkus blok kode di bawah sebuah nama sehingga dapat dipanggil dari banyak tempat. Di mana pun sebuah perhitungan, tindakan, atau pekerjaan tertentu muncul lebih dari sekali, sebuah fungsi mengubahnya menjadi satu hal yang bernama.

Kata kuncinya adalah def:

def greet(name):
    print("hello,", name)

greet("Alice")
greet("Bob")

Output:

hello, Alice
hello, Bob

Baris yang dimulai dengan def adalah definisi -- ia membuat fungsi tetapi tidak menjalankan isinya. Memanggil greet("Alice") adalah yang menjalankan blok yang menjorok ke dalam.

2.14.1. Parameter dan argumen

Nama-nama dalam tanda kurung pada baris def adalah parameter -- penampung nilai yang akan disediakan oleh pemanggil. Nilai aktual yang diteruskan adalah argumen. Sebuah fungsi dapat mengambil nol atau lebih parameter:

def square(x):
    return x * x

def add(a, b):
    return a + b

def is_even(n):
    return n % 2 == 0

Pemanggilan dengan jumlah argumen yang salah akan segera memunculkan TypeError.

2.14.2. return

Pernyataan return mengakhiri fungsi secara langsung dan menyerahkan nilai kembali ke pemanggil:

def absolute(x):
    if x < 0:
        return -x
    return x

Fungsi yang tidak pernah mencapai return (atau memiliki return kosong tanpa nilai) mengembalikan None:

>>> def shout(text):
...     print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None

Sebuah fungsi dapat memiliki beberapa pernyataan return; yang pertama dicapai menang, dan sisa isi fungsi dilewati.

2.14.2.1. Mengembalikan beberapa nilai

Python mengembalikan satu objek per pemanggilan, tetapi objek tersebut dapat berupa tuple -- dan pemanggil dapat membongkarnya langsung:

def minmax(values):
    return (min(values), max(values))

lo, hi = minmax([3, 1, 4, 1, 5, 9])

Tanda kurung di sekitar nilai kembalian bersifat opsional; return a, b dan return (a, b) adalah hal yang sama.

2.14.3. Docstring

Literal string yang ditempatkan sebagai pernyataan pertama dalam isi fungsi adalah docstring. Ia disimpan pada objek fungsi dan inilah yang ditampilkan oleh help():

def scale(value, factor):
    """Multiply ``value`` by ``factor`` and return the result."""
    return value * factor

IDE menampilkan docstring dalam tooltip saat kursor melayang di atas nama fungsi, sehingga bahkan ringkasan satu baris pun sangat bermanfaat. String triple-quote memungkinkan docstring mencakup beberapa baris saat detail lebih lanjut diperlukan.

2.14.4. Konvensi penamaan

Nama fungsi menggunakan snake_case -- kata-kata huruf kecil yang dipisahkan oleh garis bawah. Nama harus mendeskripsikan apa yang dilakukan fungsi:

  • Baik: read_temperature, parse_header, is_valid.

  • Hindari: do_stuff, handle1, temp_func.

Garis bawah di depan (_helper) menandai fungsi sebagai internal dalam modulnya. Konvensi ini dihormati secara luas tetapi tidak ditegakkan oleh Python.