Function

Posted on January 27th, 2024
Intermediate
...

Apakah Anda sadar sedari awal kita sudah menggunakan function print()? Dalam documentasinya , function print() memiliki beberapa arguments

print(*objects, sep=' ', end='\n', file=None, flush=False)

Kita juga bisa membuat function sendiri. Berikut contoh membuat function

def perdana():
   print("Hello world")
perdana()

Function perdana() akan mengeluarkan output “Hello world”
Perhatikan ketika membuat function, function tidak akan berjalan apabila tidak dipanggil. Berikut contoh function yg tidak dipanggil

def perdana():
   print("Hello world")

Function membantu menyederhanakan perintah dan mencegah duplikasi perintah yang akan digunakan di berbagai kondisi program.

Parameters Function

Function memberi akses nilai yg ingin di masukkan. Berikut contoh parameters function

def hello(name):
    print('Hello '+name)
    
hello('world')

Return Function

Function memiliki return yang bertindak untuk mengembalikan nilai function. Berikut contoh return function

import random
def hadiah(angka_acak):
   if angka_acak == 1:
       return "Laptop"
   if angka_acak == 2:
       return "Tumbler"
   if angka_acak == 3:
       return "Card holder"
   return "Hadiah kosong"
angka_acak = random.randint(1,3)
print(hadiah(angka_acak))

Coba

Yield Function

Yield berbeda dengan return dalam function. Yield akan menunda hasil yang dikembalikan function dan dapat mengingat nilai dari function tersebut. Perbedaan return dan yield yaitu return mengembalikan nilai yang spesifik sedangkan yield mengembalikan nilai yang berurutan. Berikut contoh yield function

def count():
  yield 1
  yield 2
  yield 3


c = count()
print(next(c))
print(next(c))
print(next(c))

Contoh kode diatas akan memanggil urutan satu per satu nilai yang di keluarkan, dengan bantuan yield, function tidak akan langsung berhenti setelah di jalankan. Function yang menggunakan yield biasa disebut Generator. Contoh kode generator adalah seperti berikut

def multiple_by_two(n):
  for i in range(n):
    yield i*2


for a in multiple_by_two(6):
  print(a)

Menulis generator juga bisa menggunakan metode list comprehension, alih alih menyimpan nilai dengan list, nilai di simpan sebagai generator object. Berikut contoh kodenya

generator_five = (i * 5 for i in range(5))


for y in generator_five:
  print(y)

Lambda Function

Lambda atau biasa disebut Anonymous function, merupakah function yang tidak bernama. Lambda digunakan untuk membuat function yang simple dan tidak kompleks. Berikut contoh lambda function

calc = lambda num: "genap" if num % 2 == 0 else "ganjil"


print(calc(10))

Untuk mudah dibaca, lambda harus memiliki satu ekspresi sedangkan jumlah parameternya bisa banyak. Berikut contoh lambda yang digunakan dalam global function filter()

my_list = [1, 2, 3, 4, 5]
 
new_list = list(filter(lambda x: x % 2 != 0, my_list))
 
print(new_list)


Type Hint Function

Type hint pada Python bersifat opsional, namun untuk menulis code yang bersih dan mudah dibaca, disarankan menggunakan type hint. Type hint yaitu mengidentifikasi jenis type apa yang diberikan ke dalam function beserta jenis return type nya, lihat codingan berikut

def num_to_string(number: int) -> str:
    if not isinstance(number,int):
        raise Exception("invalid parameter")
    if number > 3:
        raise Exception("number must lower than 3")
    match number:
        case 1:
            return "one"
        case 2:
            return "two"
        case 3:
            return "three"
        case _:
            return "..."
            
    
print(num_to_string(3))

Perhatikan bagian (number: int) → str. Syntax tersebut memberikan info bahwa parameter number bertipe integer dan return type nya bertipe string.

Parameters Function Order

Urutan dalam parameter function sangat menentukan jalannya sebuah function, lihat contoh function print() berikut

print(*objects, sep=' ', end='\n', file=None, flush=False)

Anda juga bisa membuat urutan sebuah parameter. Berikut contoh parameter function order

def namaLengkap(nama, jenis_kelamin='laki-laki'):
   if jenis_kelamin == 'perempuan':
       return f'Halo mbak {nama}'
   return f'Halo mas {nama}'
print(namaLengkap('nana', jenis_kelamin='perempuan'))

Coba

Sebenarnya, jika Anda hanya menulis namaLengkap('nana', 'perempuan') fungsi tetap berjalan tanpa harus menulis key dari parameter. Isi key parameter ketika Anda hanya ingin custom satu parameter dan biarkan parameter lainnya default. Contohnya dalam parameter end di function print()

print("Hello ", end='')
print("world")

Default end adalah membuat baris baru yaitu '\n' lalu di rubah menjadi string kosong.

Parameters * and **

Dalam paramater berbentuk multiple (array dan sejenisnya), biasa programmer menyebutnya dengan *args dan **kwargs. Apa saja perbedaannya?
*args yaitu parameter non key
**kwargs yaitu parameter key
*args dan **kwargs hanyalah sebutan belaka, Anda bisa menentukan sendiri nama kedua parameter tersebut.

def listing(*arguments):
   print(*arguments)
   
listing('hai')
listing('hai','saya','suka','python')

Coba

Menggunakan * dalam parameter cocok ketika Anda tidak bisa menentukan berapa jumlah parameter yang masuk kedalam function. Berikut contohnya

def multipleSum(*numbers):
   iterNum = 0
   for number in numbers:
       iterNum += number
   return iterNum
   
print(multipleSum(1,2,3))

Coba

Keyword arguments ** akan menerima parameter bertipe key = value. Berikut contohnya

def shoeInspector(**shoe):
   for key, value in shoe.items():
       print(key, value)
   
shoeInspector(name='adidas yeezy', size=42)

Coba

Tidak banyak contoh keyword arguments dikarenakan syntax nya yang bisa membuat pembaca bingung karena bersifat dinamis terhadap parameter key