Python Function memili Default argument, yaitu parameter yang kita definisikan pada fungsi. Jika fungsi tersebut dipanggil tanpa parameter yang dimaksud, maka nilai default akan digunakan. Berikut cara deklarasi fungsi dengan default parameter:
def function (a, b=value)
Berikut contoh penggunaan default parameter dalam Python
>>> def banner(message, border="-"):
... line = border * len(message)
... print(line)
... print(message)
... print(line)
...
>>> banner('Teks border default')
-------------------
Teks border default
-------------------
>>> banner('Teks border non default', '*')
***********************
Teks border non default
***********************
>>>
Pemanggilan Fungsi dan Parameter
Python cukup fleksibel dalam hal pengisian argument. Fungsi dapat dipanggil berdasar urutan argumen tanpa mengisi keywordnya, atau dengan menggunakan keyword. Jika keyword digunakan, urutan argumen boleh diubah.
>>> banner("Hello","*")
*****
Hello
*****
>>> banner("Hello", banner='=')
=====
Hello
=====
>>> banner(banner="#", message="Hello")
#####
Hello
#####
Mutable Object Pada Default Argument
Bila default argument adalah mutable object, perlu berhati-hati. Karena bila salah menggunakannya, nilai parameter tersebut tidak akan berubah. Contoh pada script dibawah, pada 2 return terakhir, waktu yang ditampilkan tidak berubah.
Default value hanya di evaluated hanya saat def block-fungsi di evaluate, oleh sebab itu nilainya tidak berubah.
>>> import time >>> time.ctime 'Fri Jun 29 01:12:09 2018' >>> def show_time(arg=time.ctime()): ... print(arg) ... >>> show_time() Fri Jun 29 01:15:14 2018 >>> show_time() Fri Jun 29 01:15:14 2018
Contoh berikutnya adalah mutable objek seperti list. Saat kita memanggil fungsi dengan menggunakan default argument, akan terlihat bermasalah.
>>> def tambah_kornet(menu=[]):
... menu.append("kornet")
... return menu
...
>>> sarapan = ['Indomie', 'Telur']
>>> tambah_kornet(sarapan)
['Indomie', 'Telur', 'Kornet']
>>> makan_siang = ['Nasi Goreng', 'Telur']
>>> tambah_kornet(makan_siang)
['Nasi Goreng', 'Telur', 'Kornet']
>>> tambah_kornet()
['Kornet']
>>> tambah_kornet()
['Kornet', 'Kornet']
Solusi dari masalah diatas adalah, menggunakan immutable objek sebagai default argument.
>>> def tambah_kornet(menu=None):
... if menu is None:
... menu = []
... menu.append("kornet")
... return menu
...
>>> tambah_kornet()
['kornet']
>>> tambah_kornet()
['kornet']