Estimasi Waktu Baca: 4 menit

Mengenal Fungsi di Python

Function atau Fungsi merupakan suatu blok kode atau blok intruksi tertentu yang akan dijalankan ketika kita memanggilnya. Dengan adanya fungsi kita dapat:

  • Membuat kode lebih mudah dibaca dan dirawat
  • Memecah kode program yang besar menjadi beberapa sub
  • Membedakan setiap fitur yang dibangun
  • Mencegah adanya kode yang ditulis secara berulang (duplikasi kode)
  • Menggunakan blok kode program tersebut berkali-kali
  • Lebih mudah mendeteksi adanya kesalahan, maksudnya gini, jika terjadi error kita dapat mencari error tersebut berdasarkan fungsi yang bersangkutan
  • dan lain-lain

Fungsi dibagi menjadi dua berdasarkan sumbernya

  • Fungsi yang sudah disediakan oleh bahasa pemrograman atau dikenal dengan built-in function
  • Fungsi yang dibuat oleh pengembang secara pribadi atau user defined function

Tata Cara Membuat Fungsi di Python

Fungsi di python menggunakan keyword atau kata kunci def dengan dilanjutkan nama fungsi tersebut ditambah tanda kurung dan diakhiri dengan titik dua seperti berikut.

<span class="token keyword">def</span> <span class="token function">nama_fungsi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>

Karena fungsi termasuk blok kode maka setelah mendeklarasikan kepala fungsi selanjutnya pada tubuh fungsi atau di dalam blok tersebut perlu adanya ruang atau space yang menjorok ke kanan yang lebih dikenal dengan sebutan indentasi.

<span class="token keyword">def</span> <span class="token function">nama_fungsi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token comment">#Masuk blok kode fungsi</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Belajar Fungsi di Python"</span><span class="token punctuation">)</span> <span class="token comment">#Perlu indentasi</span>
Python

Untuk keluar dari tubuh atau blok kode fungsi maka pada baris selanjutnya pointer haruslah diletakkan sejajar dengan kepala fungsi

<span class="token keyword">def</span> <span class="token function">nama_fungsi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token comment">#Masuk blok kode fungsi</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Belajar Fungsi di Python"</span><span class="token punctuation">)</span> <span class="token comment">#Perlu indentasi</span>
<span class="token comment">#Keluar blok kode fungsi</span>
Python

Memanggil Fungsi

Untuk memanggil fungsi tinggal ketik nama fungsi yang bersangkutan dan jangan lupa tanda kurung dibelakangnya.

nama_fungsi<span class="token punctuation">(</span><span class="token punctuation">)</span>
Python

Contoh:

<span class="token keyword">def</span> <span class="token function">belajar_fungsi</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Belajar Fungsi di Python"</span><span class="token punctuation">)</span>

belajar_fungsi<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">#Panggil fungsi</span>
Python

Hasilnya:

[email protected]:$ python coba_fungsi.py
Belajar Fungsi di Python
Bash

Fungsi dengan Parameter

Parameter bisa dikatakan adalah variabel yang menampung nilai, yang mana nilai ini nantinya akan diproses di dalam fungsi. Parameter sendiri bersifat opsional (boleh ada atau tidak).

<span class="token keyword">def</span> <span class="token function">halo_dunia</span><span class="token punctuation">(</span>halo<span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span>halo<span class="token punctuation">)</span>
Python

Kemudian untuk pemanggilan fungsi yang mengandung parameter adalah seperti ini

halo_dunia<span class="token punctuation">(</span><span class="token string">"Halo Dunia"</span><span class="token punctuation">)</span>
Python

Jadi kita juga definisikan nilai yang nantinya akan diproses. Nilai dari parameter saat pemanggilan fungsi ini dikenal dengan argumen.

Hasilnya:

Halo Dunia
Bash

Apakah parameter hanya bisa satu? Tidak! Parameter dapat lebih dari satu.

Lantas bagaimana membuat fungsi dengan parameter lebih dari satu? Gunakan tanda koma untuk memisahkannya, seperti berikut.

Contoh fungsi dengan dua parameter

<span class="token keyword">def</span> <span class="token function">luas_persegi_panjang</span><span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">)</span><span class="token punctuation">:</span>
	luas <span class="token operator">=</span> panjang <span class="token operator">*</span> lebar
	<span class="token keyword">print</span><span class="token punctuation">(</span>luas<span class="token punctuation">)</span>

luas_persegi_panjang<span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span>
32
Bash

Tiga parameter

<span class="token keyword">def</span> <span class="token function">volume_balok</span><span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">,</span> tinggi<span class="token punctuation">)</span><span class="token punctuation">:</span>
	volume <span class="token operator">=</span> panjang <span class="token operator">*</span> lebar <span class="token operator">*</span> tinggi
	<span class="token keyword">print</span><span class="token punctuation">(</span>volume<span class="token punctuation">)</span>

volume_balok<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span>
Python
480
Bash

Jika jumlahnya tidak pasti bisa seperti ini.

<span class="token keyword">def</span> <span class="token function">counting</span><span class="token punctuation">(</span><span class="token operator">*</span>args<span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span>

counting<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">)</span>

<span class="token keyword">def</span> <span class="token function">berhitung</span><span class="token punctuation">(</span><span class="token operator">**</span>kwargs<span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span>kwargs<span class="token punctuation">)</span>

berhitung<span class="token punctuation">(</span>satu<span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">,</span> dua<span class="token operator">=</span><span class="token number">2</span><span class="token punctuation">,</span> tiga<span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">,</span> empat<span class="token operator">=</span><span class="token number">4</span><span class="token punctuation">,</span> lima<span class="token operator">=</span><span class="token number">5</span><span class="token punctuation">)</span>
Python
<span class="token punctuation">(</span>1, 2, 3, 4, 5<span class="token punctuation">)</span>
<span class="token punctuation">{</span><span class="token string">'satu'</span><span class="token keyword">:</span> 1, <span class="token string">'dua'</span><span class="token keyword">:</span> 2, <span class="token string">'tiga'</span><span class="token keyword">:</span> 3, <span class="token string">'empat'</span><span class="token keyword">:</span> 4, <span class="token string">'lima'</span><span class="token keyword">:</span> 5<span class="token punctuation">}</span>
Bash

Loh kok ada *args dan **kwargs apa itu?

Untuk mengetahuinya kalian simak di artikel berikut (tunggu ya).

Fungsi Dengan Nilai Balik

Secara teknis fungsi dibedakan menjadi dua, yang pertama adalah fungsi tanpa nilai balik, fungsi jenis ini disebut juga dengan prosedur atau void function, contohnya dapat dilihat pada materi di atas tadi.

Sedangkan yang kedua adalah fungsi dengan nilai balik disebut non void function. Nah ketika kita berbicara tentang fungsi itu sendiri maka sejatinya kita mengacu pada fungsi jenis ini.

Perbedaan keduanya dapat dilihat dari ada atau tidaknya keyword return.

<span class="token comment"># Tanpa Nilai Balik</span>
<span class="token keyword">def</span> <span class="token function">hello_world</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Hello World"</span><span class="token punctuation">)</span>

<span class="token comment"># Dengan Nilai Balik</span>
<span class="token keyword">def</span> <span class="token function">halo_dunia</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token keyword">return</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Halo Dunia"</span><span class="token punctuation">)</span>

hello_world<span class="token punctuation">(</span><span class="token punctuation">)</span>
halo_dunia<span class="token punctuation">(</span><span class="token punctuation">)</span>
Python
Hello World
Halo Dunia
Python

Bila suatu fungsi dideklarasikan dengan keyword return di dalamnya maka ia adalah non void function. Sedangkan jika tidak ada keyword return maka ia adalah void function atau prosedur.

Lalu apa kegunaan dari keyword return sendiri?

Keyword return pada dasarnya berfungsi untuk mengakhiri suatu fungsi dan mengembalikan nilai saat fungsi tersebut dipanggil.

Untuk melihat lebih jelas perbedaannya, sekarang kita coba praktekan di bawah

<span class="token keyword">def</span> <span class="token function">luas_persegi_panjang</span><span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">)</span><span class="token punctuation">:</span>
	luas <span class="token operator">=</span> panjang<span class="token operator">*</span>lebar
	<span class="token keyword">print</span><span class="token punctuation">(</span>luas<span class="token punctuation">)</span>

<span class="token keyword">def</span> <span class="token function">volume_balok</span><span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">,</span> tinggi<span class="token punctuation">)</span><span class="token punctuation">:</span>
	volume <span class="token operator">=</span> luas_persegi_panjang<span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">)</span><span class="token operator">*</span>tinggi
	<span class="token keyword">print</span><span class="token punctuation">(</span>volume<span class="token punctuation">)</span>

volume_balok<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span>
Python

Hasilnya:

<span class="token number">60</span>
Traceback <span class="token punctuation">(</span>most recent call last<span class="token punctuation">)</span><span class="token punctuation">:</span>
  File <span class="token string">"fungsi.py"</span><span class="token punctuation">,</span> line <span class="token number">65</span><span class="token punctuation">,</span> <span class="token keyword">in</span> 
    volume_balok<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span>
  File <span class="token string">"fungsi.py"</span><span class="token punctuation">,</span> line <span class="token number">60</span><span class="token punctuation">,</span> <span class="token keyword">in</span> volume_balok
    volume <span class="token operator">=</span> luas_persegi_panjang<span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">)</span><span class="token operator">*</span>tinggi
TypeError<span class="token punctuation">:</span> unsupported operand type<span class="token punctuation">(</span>s<span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token operator">*</span><span class="token punctuation">:</span> <span class="token string">'NoneType'</span> <span class="token operator">and</span> <span class="token string">'int'</span>
Python

Perhatikan fungsi luas_persegi_panjang() di atas, kita tidak menggunakan return di dalamnya maka ketika kita coba menggunakan fungsi itu kembali di fungsi volume_balok() maka akan menimbulkan error. Hal ini karena fungsi luas_persegi_panjang() melakukan pencetakan atau print secara langsung di dalam tanpa mengembalikan hasil print tersebut. Jadi fungsi halo_dunia tidak ada nilainya.

Sedangkan bila kita jadikan fungsi dengan nilai balik.

<span class="token keyword">def</span> <span class="token function">luas_persegi_panjang</span><span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">)</span><span class="token punctuation">:</span>
	luas <span class="token operator">=</span> panjang<span class="token operator">*</span>lebar
	<span class="token keyword">return</span> luas

<span class="token keyword">def</span> <span class="token function">volume_balok</span><span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">,</span> tinggi<span class="token punctuation">)</span><span class="token punctuation">:</span>
	volume <span class="token operator">=</span> luas_persegi_panjang<span class="token punctuation">(</span>panjang<span class="token punctuation">,</span> lebar<span class="token punctuation">)</span><span class="token operator">*</span>tinggi
	<span class="token keyword">print</span><span class="token punctuation">(</span>volume<span class="token punctuation">)</span>

volume_balok<span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span>
Python

Hasilnya:

<span class="token number">480</span>
Python

Maka program akan berjalan sebagai mana mestinya, karena fungsi luas_persegi_panjang() yang sekarang setelah ia menerima nilai maka akan dikembalikan dan digunakan untuk proses di fungsi volume_balok(), dengan adanya return ini fungsi luas_persegi_panjang() jadi bernilai.

Variabel Global dan Variabel Lokal

Berbicara lebih dalam mengenai fungsi, maka sepatutnya kita juga harus paham tentang variabel global dan variabel lokal.

Apa itu variabel global dan variabel lokal?

Variabel global adalah variabel yang dapat diakses oleh semua fungsi. Sedangkan variabel lokal hanya bisa diakses di dalam fungsi tempat ia dideklarasikan.

Kemudian kita juga perlu perhatikan bahwasanya di python ada yang namanya scope atau urutan pengaksesan variabel yang mana urutannya adalah Local-Global-Built in.

Jadi python akan mencari variabel lokal terlebih dahulu, jika tidak ada maka beralih ke variabel global, jika tidak ada lagi maka python mulai ke built in. Jika masih tetap nihil, maka akan muncul NameError.

Perhatikan praktik berikut.

laptop <span class="token operator">=</span> <span class="token string">"ACER"</span>
harga <span class="token operator">=</span> <span class="token string">"5.000.000"</span>

<span class="token keyword">def</span> <span class="token function">lihat_laptop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span>laptop<span class="token punctuation">,</span> harga<span class="token punctuation">)</span>

lihat_laptop<span class="token punctuation">(</span><span class="token punctuation">)</span>
Python
ACER <span class="token number">5.000</span><span class="token punctuation">.</span><span class="token number">000</span>
Python

Pada program di atas fungsi lihat_laptop() mengakses variabel laptop dan harga, yang mana kedua variabel ini letaknya di luar fungsi, inilah yang dinamakan variabel global.

Selanjutnya ketika di dalam fungsi mulai ditambah variabel dengan nama yang sama.

laptop <span class="token operator">=</span> <span class="token string">"ACER"</span>
harga <span class="token operator">=</span> <span class="token string">"5.000.000"</span>

<span class="token keyword">def</span> <span class="token function">lihat_laptop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
	laptop <span class="token operator">=</span> <span class="token string">"ASUS"</span>
	harga <span class="token operator">=</span> <span class="token string">"5.200.000"</span>
	<span class="token keyword">print</span><span class="token punctuation">(</span>laptop<span class="token punctuation">,</span> harga<span class="token punctuation">)</span>

lihat_laptop<span class="token punctuation">(</span><span class="token punctuation">)</span>
Python

Maka hasilnya,

ASUS <span class="token number">5.200</span><span class="token punctuation">.</span><span class="token number">000</span>
Python

Fungsi lihat_laptop() akan mengakses variabel laptop dan harga yang terdapat di dalam bloknya, maka dari itu kedua variabel ini disebut variabel lokal.