Basic Python PDF
Basic Python PDF
Pengenalan Python
Python adalah bahasa pemrograman multifungsi yang dibuat oleh Guido van Rossum dan
dirilis pada tahun 1991. GvR, begitu ia biasa disebut di komunitas Python, menciptakan Python
untuk menjadi interpreter yang memiliki kemampuan penanganan kesalahan (exception
handling) dan mengutamakan sintaksis yang mudah dibaca serta dimengerti (readability).
Didesain untuk memudahkan dalam prototyping, Python menjadi bahasa yang sangat mudah
dipahami dan fleksibel.
Python juga memilih untuk menggunakan indentasi untuk mengelompokkan blok kode,
berbeda dengan beberapa bahasa lain yang menggunakan simbol tertentu, misalnya kurung
kurawal, atau sintaksis begin-end. Sehingga secara visual pun, blok kode Python didesain untuk
mudah dipahami. Salah satu yang paling dikenal adalah, penggunaan titik koma atau semicolon
(;) tidak wajib di Python dan penggunaan semicolon cenderung dianggap bukan cara khas
Python (non-pythonic way), meskipun ia tetap dapat digunakan, misalnya untuk memisahkan dua
statement dalam baris yang sama.
Python juga memilih untuk mengadopsi dynamic typing secara opsional, yakni variabel
yang dibuat tidak akan diketahui tipenya hingga ia dipanggil pertama kali atau dieksekusi, tidak
perlu deklarasi variabel (meskipun dimungkinkan), dan memungkinkan tipe data berubah dalam
proses eksekusi program. Sejak Python versi 3.6, sudah tersedia pilihan untuk static typing.
Python pun terus berkembang dalam penggunaannya, sehingga fitur-fitur baru dibutuhkan untuk
dikembangkan. Versi 2.0 dirilis Oktober 2000 dengan beberapa pengembangan fitur
termasuk Garbage Collector dan Memory Management yang juga menjadi fitur pada beberapa
bahasa pemrograman modern lainnya, di antaranya Java dan C#.
Python 3.0 adalah versi perubahan mayor yang dirilis pada Desember 2008, yang didesain
sebagai versi yang tidak backward-compatible dengan versi-versi sebelumnya. Beberapa
sintaksis/statement yang sebelumnya berjalan di versi 2.x, kini tidak lagi berjalan. Semua hal ini
didasarkan pada keinginan bahasa Python yang kembali ke “inti”, yakni readable, consistent &
explicit. Contohnya, fungsi print yang sebelumnya adalah statement di python 2.x, menjadi
function di python 3.x.
Versi terbaru Python pada saat pembaruan modul ini adalah 3.8 yang dirilis pada 14 Oktober
2019. Pada saat tulisan ini dibuat, Python 3.9 sedang dikembangkan dan berstatus 3.9.0 alpha 1.
Sejarah / Overview
Saat ini, Python dikelola oleh lembaga non-komersial Python Software
Foundation (PSF). Namun sebelumnya, GvR dijuluki sebagai Benevolent dictator for life
(BDFL) karena hampir semua keputusan pengembangan Python diambil oleh GvR,
berbeda dengan bahasa lain yang misalnya menggunakan voting dan semacamnya. Pasca
tahun 2000, dibentuklah beberapa sistem yang memungkinkan Python menjadi lebih
sustain, misalnya Python Enhancement Proposals (PEP) untuk pengembangan Python
dan tentunya Python Software Foundation (PSF).
Jika PSF menjadi lembaga yang mengelola dan mengadvokasi Python, PEP
menjadi panduan dalam pengembangan Python. Beberapa PEP memuat misalnya
bagaimana sintaksis dan bagaimana Bahasa Python akan berevolusi, bagaimana modul
akan dinyatakan usang (deprecated), dan sebagainya. Setelah kurang lebih 30 tahun
dalam pengembangan Python, GvR memutuskan untuk tidak lagi menjabat BDFL pada
12 Juli 2018.
Salah satu patokan dalam pengembangan Python adalah PEP 20 yang berjudul
Zen of Python.
Jika ada pengembangan fitur Python, maka PEP 20 inilah yang menjadi dasar/akar dalam
mengambil keputusan.
B. Mengapa Python
Efektivitas Python cukup terbukti dengan banyaknya jumlah pengguna Bahasa
Pemrograman ini. Berbagai survei memasukkan Python dalam top-3 sebagai bahasa dengan
penggunaan terbanyak, bersaing dengan Java dan PHP. Python dapat digunakan dalam
mengakomodasi berbagai gaya pemrograman, termasuk structured, prosedural, berorientasi-
objek, maupun fungsional. Python juga dapat berjalan pada berbagai sistem operasi yang
tersedia. Beberapa pemanfaatan bahasa Python di antaranya:
Dan lain-lain.
Python Package Index (https://pypi.org/) menyediakan lebih dari 209.000 modul (*Desember
2019) dan skrip yang dapat diinstal dan digunakan secara mudah dalam proyek Python Anda.
Saat ini, Python juga menjadi salah satu bahasa pilihan untuk masuk ke dunia Data Science. Tiga
hal utama pada Data Science - machine learning, data analysis, dan data visualization banyak
disediakan berbasis Python. Sejumlah pustaka paling banyak digunakan dalam machine learning
berbasis Python, misalnya: Scikit-Learn, Tensorflow, dan PyTorch.
C. 1. Python Basic – Style Guide (1/2)
Style Guide pada Python Code
Berikut adalah beberapa style guide menulis kode Python dengan baik dan benar.
Panduan gaya penulisan kode ini mengacu pada PEP-008. Beberapa proyek mungkin memiliki
style guide tersendiri. Sejumlah contoh kode yang ditulis di halaman ini berupa pseudocode,
bertujuan hanya untuk memberikan gambaran tentang panduan gaya penulisan kode saja.
Guido, pembuat bahasa Python, merasakan bahwa kode lebih sering dibaca dibandingkan
ditulis. Oleh sebab itu, panduan ini lebih ditekankan untuk kemudahan membaca kode dan
membuatnya konsisten pada (hampir) setiap proyek Python yang ada.
Namun demikian pada kasus-kasus tertentu, keputusan adanya modifikasi tetap pada
penulis kodenya. Mungkin sebuah kode dapat terbaca lebih jelas walaupun tidak mengikuti satu
atau lebih panduan dalam modul ini.
Indentasi
Python menggunakan indentasi untuk menulis kode bertingkat. Bahasa lain mungkin
menggunakan statement tertentu (Begin, end - pascal), perbedaan baris atau kurung kurawal.
Statement yang memiliki indentasi yang sama dan diletakkan secara berurutan dikenali sebagai
blok statement oleh Python dan akan dijalankan secara berurutan.
Baris Lanjutan
Seringkali, saat menulis kode, kita harus menggunakan baris lanjutan karena kode tidak
cukup dituliskan dalam satu baris. Umumnya, kita dapat menggunakan tanda hubung, kurung,
kurawal, atau seperti disarankan pada PEP-008, gunakan hanging indent. Beberapa panduan
dalam menggunakan hanging indent dalam penulisan kode python adalah sebagai berikut:
Disarankan:
Tidak Disarankan :
Kondisional (If)
Bagian ini hanya memberikan gambaran mengenai standar penulisan, pembahasan
mengenai kondisional ada di modul Percabangan.
Saat menulis pernyataan kondisional, misalnya IF, kita juga menemukan penulisan yang
terkadang tidak cukup dituliskan dalam satu baris, atau menggunakan beberapa operand yang
akan menyulitkan apabila digabung berturut-turut.
Dalam kondisi ini, Python tidak memberikan panduan spesifik, mengingat kondisi yang
dihadapi programmer mungkin berbeda. Contoh-contoh yang disarankan adalah sebagai berikut
(meskipun dimungkinkan versi-versi lain selama keterbacaan kode tetap tinggi):
Kurung/siku penutup
Penempatan kurung atau siku penutup juga dapat diletakkan pada baris lanjutan, dengan
mengikuti posisi karakter pertama yang bukan whitespace (non-whitespace character) pada baris
sebelumnya:
Spasi adalah model yang disarankan PEP-008. Pengecualian pada kode yang sudah
menggunakan tab/tabulasi sebelumnya. Python sejak versi 3 tidak memperbolehkan
pencampuran antara Tab dan Spasi untuk indentasi. Anda disarankan untuk melakukan konversi
kode untuk menggunakan spasi sepenuhnya.
Anda dapat menggunakan find-replace untuk mengganti tab, atau memanggil kode Anda
yang berbasis Python 2 dengan opsi -t (warning) atau -tt (error) untuk mengetahui titik
penggunaan tab dan spasi yang bercampur.
Panjang baris maksimum
Batasi panjang kode setiap baris hingga 79 karakter. Untuk komentar atau dokumentasi,
usahakan untuk tidak melebihi 72 karakter.
Dengan membatasi panjang baris maksimum, Anda akan memudahkan pengguna lain
membuka >1 window editor secara berdampingan, misalnya untuk melakukan review atau
perbandingan. Panjang kode setiap baris yang dibatasi akan memudahkan Anda jika
menggunakan code review tools yang menunjukkan dua versi berbeda secara berdampingan.
Mengapa 79? Hal ini dicontohkan pada editor-editor dengan window-width yang terset
pada 80 karakter. 1 karakter tersisa bisa berupa marker glyph atau whitespace. Pembatasan 79
karakter ini membuat editor terkecil sekalipun tidak akan merusak struktur dan keterbacaan kode
Anda. Jika Anda atau tim mengalami kesulitan (misalnya karena struktur penamaan variabel)
yang telah disepakati, cenderung melebihi batasan panjang karakter, Anda dapat melakukan
kesepakatan atau konvensi yang berlaku pada kode Anda sendiri. Umumnya hingga 99 karakter
per baris.
Penggantian baris setelah operator binary memang pernah menjadi rekomendasi. Namun
ternyata penggunaan metode ini membuat mata cepat lelah dan Anda perlu melakukan kroscek
pada baris berbeda. Contohnya:
Baris kosong
Anda disarankan untuk menambahkan dua baris kosong pada top level function dan class
definitions. Kemudian untuk setiap deklarasi method, dipisahkan dengan satu baris kosong.
Anda juga dapat menambahkan baris kosong ini apabila dibutuhkan, misalnya untuk
memisahkan gabungan beberapa fungsi yang memiliki fungsi terkait atau untuk meningkatkan
keterbacaan kode. Pemisahan baris kosong tidak diperlukan jika deklarasi fungsi/method Anda
bersifat satu baris (one-liner), umumnya untuk fungsi/method yang belum diimplementasikan
secara penuh.
File Encoding
Kode dalam inti Python, selalu menggunakan encoding UTF-8 (Python 3) atau ASCII
(Python 2). Dalam hal ini, apabila dalam sebuah berkas tidak ditulis deklarasi encoding, maka
berkas tersebut menggunakan encoding ASCII (Python 2) atau UTF-8 (Python 3). Dalam
standard library, non-default encoding hanya digunakan untuk pengujian atau memberikan
komentar/dokumentasi, misalnya nama penulis yang tidak menggunakan karakter ASCII.
Import
Saat melakukan import library, lakukan import setiap library pada baris berbeda.
Import umumnya diletakkan pada bagian awal berkas. Setelah komentar dan dokumentasi
tentang berkas tersebut (misalnya definisi kelas, dll), sebelum variabel global dan konstanta. Jika
memungkinkan, kelompokkan import dalam urutan berikut:
1. Standard Library
2. Library Pihak Ketiga
3. Local/Library spesifik
Wildcard imports seperti tertulis, sedapat mungkin dihindari untuk mengatasi ambiguitas dan
ketidaktahuan tentang modul apa yang di-import.
Tanda Petik
Petik tunggal (‘) dan petik ganda (“) dianggap sama oleh Python, dan tidak memiliki
preferensi khusus untuk penggunaannya. Hal ini dikarenakan ada kemungkinan string yang
memuat salah satunya. Anda disarankan untuk menggunakan salah satunya secara konsisten.
1. assignment (=),
2. augmented assignment (+=, -=etc.),
3. comparisons (==, <, >, !=, <>, <=, >=, in, not in, is, is not),
4. Booleans (and, or, not).
Jika operator dengan berbagai tingkatan prioritas digunakan, letakkan whitespace pada
operator-operator dengan prioritas terendah. Namun Anda juga dapat menyesuaikannya sendiri.
Catatan: jangan pernah menggunakan >1 spasi dan gunakan spasi yang sama baik di
sebelah kiri maupun kanan dari operator-operator binary Anda.
Komentar
Dalam sebuah kode Python, Anda diajak untuk memastikan kode Anda terbaca oleh
programmer lain. Salah satu caranya adalah dengan menggunakan fitur komentar untuk
memberitahu fungsi atau informasi lain terkait kode Anda. Pastikan komentar Anda ter-update
dan tidak mengalami kontradiksi dengan kode yang ada.
Jika memungkinkan, tuliskan komentar dalam bahasa Inggris, kecuali Anda yakin bahwa
pembaca komentar ini dipastikan mengerti bahasa Anda.
Blok komentar
Blok komentar umumnya digunakan untuk menjelaskan fungsi utuh atau sub-fungsi yang
mengikuti/berada di bawahnya. Blok komentar diindentasi setara dengan kode yang dijelaskan.
Setiap barisnya diawali dengan # dan sebuah spasi serta setiap paragrafnya dimulai pada baris
baru.
Komentar Inline
Komentar Inline pada Python umumnya diletakkan pada baris yang sama dengan kode.
Umumnya dipisahkan dan dirapikan dengan jarak dua spasi dari kode yang dimaksud, diawali #
dan sebuah spasi. Komentar inline dapat juga digunakan di atas baris yang ingin diberikan
komentar, agar tidak mengurangi jumlah karakter yang dapat dituliskan dalam sebuah baris.
Untuk semua jenis komentar, jangan menuliskan komentar untuk hal yang sudah langsung dapat
dibaca dari kodenya, seperti contoh berikut:
Dokumentasi
Guideline untuk menuliskan dokumentasi (docstring) yang baik tersedia di PEP 257.
Kuncinya:
Buatlah dokumentasi untuk semua modul, fungsi, kelas, dan method yang bersifat public atau
akan diakses publik.
Docstring tidak diwajibkan pada method yang tidak bersifat public, namun Anda disarankan
menambahkan komentar tentang Apa saja yang dilakukan fungsi/modul ini beserta informasi
lainnya yang mungkin diperlukan. Komentar ini diletakkan setelah baris def.
Anda disarankan untuk menutup sebuah docstring yang lebih dari satu baris, pada baris
baru berikutnya:
Untuk docstring satu baris, Anda disarankan untuk meletakkan penutup """ - nya pada
baris yang sama.
Numbers
1. a=5
2. print(a, "is of type", type(a))
3. a = 2.0
4. print(a, "is of type", type(a))
5. a = 1+2j
6. print(a, "is complex number?", isinstance(1+2j,complex))
Output:
Integer tidak dibatasi oleh angka atau panjang tertentu, namun dibatasi oleh memori yang
tersedia. Sehingga Anda tidak perlu menggunakan variabel yang menampung big number
misalnya long long (C/C++), biginteger, atau sejenisnya. Contoh kode untuk menunjukkan
bahwa Python tidak membatasi output integer adalah pencarian bilangan ke-10.000 pada deret
fibonacci (catatan: bilangan ke-10.000 pada deret fibonacci memiliki panjang 2.090 digit)
sebagai berikut:
1. 336447648764317832666216120051075433103021484606800639065647699746800814421666623681555955
136337340255820653326808361593737347904838652682630408924630564318873545443695598274916066
020998841839338646527313000888302692356736131351175792974378544137521305205043477016022647
583189065278908551543661595829872796829875106312005754287834532155151038708182989697916131
278562650331954871402142875326981879620469360978799003509623022910263681314931952756302278
376284415403605844025721143349611800230912082870460889239623288354615057765832712525460935
911282039252853934346209042452489294039017062338889910858410651831733604374707379085526317
643257339937128719375877468974799263058370657428301616374089691784263786242128352581128205
163702980893320999057079200643674262023897831114700540749984592503606335609338838319233867
830561364353518921332797329081337326426526339897639227234078829281779535805709936910491754
708089318410561463223382174656373212482263830921032977016480547262438423748624114530938122
065649140327510866433945175121615265453613331113140424368548051067658434935238369596534280
717687753283482343455573667197313927462736291082106792807847180353291311767789246590899386
354593278945237776744061922403376386740040213303432974969020283281459334188268176838930720
036347956231171031012919531697946076327375892535307725523759437884345040677155557790564504
430166401194625809722167297586150269684431469520346149322911059706762432685159928347098912
847067408620085871350162603120719031720860940812983215810772820763531866246112782455372085
323653057759564300725177443150515396009051686032203491632226408852488524331580515348496224
348482993809050704834824493274537326245677558790891871908036620580095947431500524025327097
469953187707243768259074199396322659841474981936092852239450397071654431564213281576889080
587831834049174345562705202235648464951961124602683139709750693826487066132645076650746115
126775227486215986425307112984411826226610571635150692600298617049454250474913781151541399
415506712562711971332527636319396069028956502882686083622410820505624307017949761711212330
66073310059947366875
Perhatikan bagaimana Python melakukan pemotongan pada digit ke 16 pada variabel float
b.Float atau bilangan pecahan dibatasi akurasinya pada 15 desimal. Yang membedakan Integer
dan Float adalah titik (decimal points). Misalnya dalam penulisan angka 1 jenisnya Integer, tapi
jika dituliskan sebagai 1.0 artinya berjenis Float atau pecahan.
1. b = 0.1234567890123456789
2. b
Output:
0.12345678901234568
Karena Python banyak digunakan juga oleh matematikawan, tipe bilangan di Python juga
mendukung bilangan imajiner dan bilangan kompleks. Nilai bilangan kompleks (complex)
dituliskan dalam formulasi x + yj, yakni bagian x adalah bilangan real, dan y adalah bilangan
imajiner. Contohnya adalah sebagai berikut:
1. a = 1234567890123456789
2. a
Output:
1234567890123456789
1. c = 1+2j
2. c
Output:
(1+2j)
Strings
String adalah urutan dari karakter unicode. Dideklarasikan dengan petik tunggal atau
ganda. String >1baris dapat ditandai dengan tiga petik tunggal atau ganda ''' atau """.
1. s = "This is a string"
1. s = '''this is a multiline
2. next new line (1)
3. another new line (2)'''
Seperti list dan tuple, slicing operator [ ] dapat digunakan pada string. Sebuah string utuh
bersifat mutable, namun elemennya bersifat immutable.
1. s = "Hello World!"
2. print(s[4])
3. print(s[6:11])
4. s[5]="d"
Output:
'o'
'World'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
1. s = "Hello World!"
2. print(s)
3. s= "Try Python!"
4. print(s)
Output:
'Hello World!'
'Try Python!'
Bool/Boolean
Tipe data bool atau Boolean, merupakan turunan dari bilangan bulat (integer atau int)
yang hanya punya dua nilai konstanta: True dan False.
Nilai Boolean
Nilai konstanta False dan True merepresentasikan nilai kebenaran (truth values),
meskipun ada nilai-nilai lain yang juga dianggap benar atau salah. Di dalam konteks angka,
misalnya digunakan sebagai argumen dari operator matematika aritmatika, kedua nilai ini
berlaku seperti halnya bilangan bulat 0 dan 1, sesuai False dan True.
Ada fungsi bawaan bool() yang dapat mengubah nilai menjadi nilai Boolean, apabila nilai
tersebut dapat direpresentasikan sebagai nilai kebenaran (truth values).
Nilai kebenaran adalah sebuah nilai yang dapat diuji sebagai benar atau salah, untuk
digunakan di sintaksis kondisi if atau while atau sebagai operan dari operasi Boolean.
Berikut adalah objek bawaan yang didefinisikan bernilai salah dalam pengujian nilai
kebenaran:
Untuk objek yang didefinisikan sendiri, representasi nilai Boolean akan bergantung dari
definisi metode (method) khusus bernama __bool__(self). Jika metode ini mengembalikan True
maka interpretasi nilai dari objeknya akan True, demikian juga sebaliknya.
Operasi Boolean
Operasi dan fungsi bawaan yang memiliki hasil Boolean akan selalu
mengembalikan 0 atau False untuk yang bernilai salah, serta 1 atau True untuk yang bernilai
benar, kecuali dinyatakan berbeda dalam dokumentasi.
Operasi untuk tipe Boolean akan dijelaskan lebih lanjut di modul Operator, Operands,
dan Expressions.
List
List adalah jenis kumpulan data terurut (ordered sequence), dan merupakan salah satu
variabel yang sering digunakan pada Python. Serupa, namun tak sama dengan array pada bahasa
pemrograman lainnya. Bedanya, elemen List pada Python tidak harus memiliki tipe data yang
sama. Mendeklarasikan List cukup mudah dengan kurung siku dan elemen yang dipisahkan
dengan koma. Setiap data didalamnya dapat diakses dengan indeks yang dimulai dari 0.
Python mengenal slicing operator [] yang dapat melakukan ekstraksi sebuah item atau
beberapa item yang berada dalam range tertentu pada tipe data urutan (sequences), misalnya list,
string dan tuple. Beberapa tipe urutan juga mendukung "extended slicing" dengan parameter
ketiga berupa "step".
x[0] artinya mengambil elemen paling awal, dengan index 0 dari List x
x[-1] artinya mengambil elemen dengan index paling belakang ke-1 dari List x
x[3:5] artinya membuat list dari anggota elemen List x dengan index 3 hingga sebelum
index 5 (tidak termasuk elemen dengan index 5, dalam hal ini hanya index 3-4)
x[:5] artinya membuat list dari anggota elemen List x paling awal hingga sebelum index 5
(tidak termasuk elemen dengan index 5, dalam hal ini hanya index 0-4)
x[-3:] artinya membuat list dari anggota elemen List x mulai index ke-3 dari belakang
hingga paling belakang
x[1:7:2] artinya membuat list dari anggota elemen List x dengan index 1 hingga sebelum
index 5, dengan "step" 2 (dalam hal ini hanya index 1, 3, 5)
1. x = [5,10,15,20,25,30,35,40]
2. print(x[5])
3. print(x[-1])
4. print(x[3:5])
5. print(x[:5])
6. print(x[-3:])
7. print(x[1:7:2])
Output:
30
40
[20, 25]
[5, 10, 15, 20, 25]
[30, 35, 40]
[10, 20, 30]
Elemen pada list dapat diubah atau ditambahkan. Misalnya untuk melakukan perubahan
kemudian penambahan:
1. x = [1,2,3]
2. x[2]=4
3. x
Output:
[1, 2, 4]
1. x.append(5)
2. x
Output:
[1, 2, 4, 5]
Output:
1. del spam[2]
2. spam
Output:
['cat', 'bat']
Tuple
Tuple adalah jenis dari list yang tidak dapat diubah elemennya. Umumnya tuple
digunakan untuk data yang bersifat sekali tulis, dan dapat dieksekusi lebih cepat. Tuple
didefinisikan dengan kurung dan elemen yang dipisahkan dengan koma.
1. t = (5,'program', 1+3j)
Seperti list, kita dapat melakukan slicing, namun pada tuple kita tidak dapat melakukan
perubahan:
1. t = (5,'program', 1+3j)
2. t[1]
3. t[0:3]
4. t[0]=10
Output:
'program'
(5, 'program', (1+3j))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Set
Set adalah kumpulan item bersifat unik dan tanpa urutan (unordered collection).
Didefinisikan dengan kurawal dan elemennya dipisahkan dengan koma. Pada Set kita dapat
melakukan union dan intersection, sekaligus otomatis melakukan penghapusan data duplikat.
1. a = {1,2,2,3,3,3}
2. a
Output:
{1, 2, 3}
Karena set bersifat unordered, maka kita tidak bisa mengambil sebagian data / elemen
datanya menggunakan proses slicing.
1. a = {1,2,3}
2. a[1]
Output:
Dictionary
Dictionary pada Python adalah kumpulan pasangan kunci-nilai (pair of key-value) yang
bersifat tidak berurutan. Dictionary dapat digunakan untuk menyimpan data kecil hingga besar.
Untuk mengakses datanya, kita harus mengetahui kuncinya (key). Pada Python, dictionary
didefinisikan dengan kurawal dan tambahan definisi berikut:
1. d = {1:'value','key':2}
2. print(type(d))
Output:
<class 'dict'>
1. d = {1:'value','key':2}
2. print(type(d))
3. print("d[1] = ", d[1]);
4. print("d['key'] = ", d['key']);
Output:
<class 'dict'>
d[1] = value
d['key'] = 2
Dictionary bukan termasuk dalam implementasi urutan (sequences), sehingga tidak bisa
dipanggil dengan urutan indeks. Misalnya dalam contoh berikut dicoba dengan indeks 2, tetapi
menghasilkan error (KeyError) karena tidak ada kunci (key) 2:
1. d = {1:'value','key':2}
2. print(type(d))
3. print("d[1] = ", d[1]);
4. print("d['key'] = ", d['key']);
5.
6. # Generates error
7. print("d[2] = ", d[2]);
Output:
<class 'dict'>
d[1] = value
d['key'] = 2
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-7-4b566e677ca2> in <module>()
1 d = {1:'value','key':2}
----> 2 print("d[2] = ", d[2]);
KeyError: 2
Kita dapat melakukan konversi tipe data bawaan dengan menggunakan fungsi konversi
tipe bawaan (standard type) misalnya: int(), float(), str(), dll.
1. float(5)
Output:
5.0
1. int(10.6)
Output:
10
1. int(-10.6)
Output:
-10
1. float('2.5')
Output:
2.5
1. str(25)
Output:
'25'
1. int('1p')
Output:
Anda juga dapat melakukan konversi kumpulan data (set, list, tuple).
1. set([1,2,3])
Output:
{1, 2, 3}
1. tuple({5,6,7})
Output:
(5, 6, 7)
1. list('hello')
Output:
List dari beberapa List yang isinya pasangan nilai menjadi Dictionary.
Serta konversi List dari beberapa Tuple yang isinya pasangan nilai menjadi Dictionary.
1. dict([[1,2],[3,4]])
Output:
{1: 2, 3: 4}
1. dict([(3,26),(4,44)])
Output:
https://docs.python.org/id/3.8/tutorial/introduction.html
https://docs.python.org/id/3.8/library/stdtypes.html
https://docs.python.org/id/3.8/reference/datamodel.html#the-standard-type-hierarchy
E. Input/Output
Di bagian ini Anda akan mempelajari tentang mekanisme Input/Output, misalnya
meminta masukan dari pengguna, menyimpan nilai pada variabel dan mencetak nilai ke layar.
Setelah sebelumnya mempelajari tipe data, selanjutnya Anda akan belajar tentang
variabel. Variabel adalah sebuah tempat (di memori komputer) untuk menyimpan nilai dengan
tipe data tertentu.
Untuk memberikan nilai pada sebuah variabel, kita menggunakan operator "=", antara
nama variabel dengan nilai yang ingin disimpan.
Misalnya: x = 1
Artinya kita akan menyimpan nilai 1 (tipe int) ke variabel x.
Output
Print
Seperti dicontohkan dalam beberapa sample code sebelumnya, fungsi print() adalah cara
output langsung ke konsol/layar.
1. print("Hello, World!")
Output:
Hello, World!
Untuk memasukkan nilai variabel pada string, Python memiliki dua cara. Cara yang
pertama adalah langsung menggabungkan variabel pada statement print().
1. a=5
2. print('The value of a is', a)
Output:
The value of a is 5
Untuk menampilkan text (string), bisa menggunakan mekanisme string format. Misalnya
yang pertama:
1. print('hello {}'.format('kakak'))
Cara yang kedua mirip dengan sintaks C/C++, yakni menggunakan operator “%” yang
ditambahkan dengan "argument specifiers", misalnya "%s" and "%d". Contohnya saat kita ingin
menambahkan nama kita pada string hello:
1. name = "John"
2. print("Hello, %s!" % name)
Output:
Hello, John
1. name = "John"
2. age = 15
3. print("%s is %d years old." % (name, age))
Output:
1. mylist = [1,2,3]
2. print("A list: %s" % mylist)
Output:
A list: [1, 2, 3]
1. %s - String
2. %d - Integers
3. %f - Bilangan Pecahan
4. %.<digit>f - Bilangan pecahan dengan sejumlah digit angka dibelakang koma.
5. %x/%X - Bilangan bulat dalam representasi Hexa (huruf kecil/huruf besar)
Contoh mencetak representasi Hexa (bilangan basis 16):
1. a, b = 10, 11
2. a, b
3. print('a: %x and b: %X' % (a, b))
Output:
(10, 11)
a: a and b: B
https://docs.python.org/id/3.8/library/string.html#format-specification-mini-language
Input
input()
Untuk memungkinkan user memberikan input pada program Anda, gunakan fungsi
input(), dengan argumen dalam kurung () adalah teks yang ingin ditampilkan (prompt) dan
variabel sebelum tanda sama dengan (=) adalah penampung hasil dari input pengguna:
Output:
Enter a number: 10
1. num
Output:
'10'
Secara default, input dari user adalah string (walaupun pada contoh di atas, 10
sebenarnya dimaksudkan sebagai integer) yang ditandai dengan petik. Untuk itu diperlukan
fungsi konversi yang akan dibahas pada modul-modul selanjutnya, misalnya int() dan float().
1. int(num)
Output:
10
1. float(num)
Output:
10.0
Jika input merupakan string berisi ekspresi matematika, maka konversi dengan int() atau
float() akan menghasilkan error. Anda dapat menggunakan fungsi eval() yang sekaligus juga
berfungsi menyelesaikan ekspresi matematika. Anda akan mempelajari lebih jauh mengenai
fungsi pada modul Fungsi.
1. int('2+3')
Output:
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '2+3'
1. eval('2+3')
Output:
Command-line arguments
Python memungkinkan Anda untuk membuat sebuah "skrip" berupa deretan kode
program kemudian disimpan dalam sebuah berkas dengan nama akhiran .py (misal: skrip.py).
Berkas ini dapat dipanggil sebagai skrip di konsol atau command prompt, serta dapat
ditambahkan parameter tambahan saat memanggil skrip tersebut.
Hal ini difasilitasi oleh module sys yang telah dibawa secara default pada Python. Untuk
menggunakannya, jangan lupa lakukan import terlebih dahulu:
1. import sys
Utamanya fungsi yang akan digunakan adalah sys.argv yang memuat seluruh argumen
yang diterima. Anda juga dapat menggunakan len(sys.argv) untuk mengetahui banyaknya
argumen yang ditampung.
1. import sys
2. print('Number of arguments:', len(sys.argv), 'arguments.')
3. print('Argument List:', str(sys.argv))
4. print(sys.argv[1])
Jalankan pada konsol/terminal/command prompt:
Output:
https://docs.python.org/id/3.8/library/string.html#format-string-syntax
F. Dynamic Typing
Python dikenal sebagai salah satu bahasa yang menerapkan dynamic typing, yakni
bahasa pemrograman yang hanya mengetahui tipe variabel saat program berjalan dan
dilakukan assignment. Tentu saja, pada Python juga umumnya tidak ada deklarasi
variabel, hanya berupa assignment statement. Cara ini adalah salah satu bentuk
simplifikasi alokasi memori dalam bahasa Python. Anda dapat selalu memeriksa tipe
variabel yang digunakan dengan fungsi type() dan memastikan tipe variabel yang tepat
dengan metode isinstance(). Anda akan mempelajari lebih jauh mengenai fungsi pada
modul Fungsi dan mengenai class pada modul Pemrograman Berorientasi Objek.
Contoh:
Output:
<class 'int'>
<class 'str'>
1. if False:
2. 1 + "two" # This line never runs, so no TypeError is raised
3. else:
4. 1+2
Output:
Output:
Pada contoh pertama, cabang 1+ “two” tidak pernah dioperasikan. Sehingga kode tidak akan
diperiksa. Namun pada contoh kedua, pernyataan tersebut menimbulkan TypeError karena Anda
tidak dapat menggabungkan Integer dan String. Bagian ini hanya memberikan gambaran tentang
operasi antar tipe, Anda akan mempelajari lebih jauh tentang kesalahan (Error) di modul
Penanganan Kesalahan.
1. thing = "Hello"
2. type(thing)
Output:
<class 'str'>
1. thing = 28.1
2. type(thing)
Output:
<class 'float'>
Seperti dijelaskan sebelumnya, fungsi type() dapat digunakan untuk mengidentifikasi tipe
variabel pada saat ia diperiksa. Contoh di atas menunjukkan bahwa tipe dari variabel “thing”
dapat berubah dan Python dapat menerima perubahan ini pada saat program dijalankan
Python menggunakan dynamic typing sebagai opsi utama, namun sejak Python 3.6 sudah
mendukung juga static typing. Pada PEP 484 diperkenalkan type hints, yang memungkinkan
Anda untuk melakukan static type checking pada Python.
Static typing seperti didefinisikan di PEP 484, 526, 544, 560, dan 563 dibangun bertahap
di atas runtime Python yang ada dan dibatasi oleh perilaku sintaksis dan runtime yang ada. Tidak
seperti pada bahasa lain, type hints tidak menjadikan sebuah variabel menjadi static typed,
melainkan memberikan saran tipe. Terkait static type hints, dapat dibaca pada PEP 484.
Duck Typing
Python juga sering diafiliasikan dengan metode duck typing, yang merefleksikan pada
frase:
“if it walks like a duck and it quacks like a duck, then it must be a duck”
(Jika sesuatu berjalan seperti bebek dan bersuara seperti bebek, maka kemungkinan besar
ia adalah bebek).
Duck typing adalah sebuah konsep, tipe atau kelas dari sebuah obyek tidak lebih penting
daripada metode yang menjadi perilakunya. Duck typing ini tidak terkait langsung dengan
dynamic typing atau static typing, ini hanya memberikan keleluasaan pada developer untuk tidak
perlu mencemaskan tentang tipe atau kelas dari sebuah obyek, yang lebih penting adalah
kemampuan melakukan operasinya. Sehingga untuk memeriksa dan mengetahui tipe sebuah
obyek, Anda cukup memastikan metode/fungsi/behavior dari obyek tersebut. Misalnya fungsi
len() untuk mengetahui panjang string, yang tidak berlaku pada variabel numerik (misalnya
integer).
1. x=333
2. len(x)
Output:
Transformasi angka
Misalnya untuk nomor nota atau nomor antrian, Anda akan menemui kebutuhan
menambahkan awalan 0 (0001 untuk angka 1, 0101 untuk angka 101, dan sebagainya). Anda
dapat menggunakan fungsi zfill(). Catatannya adalah angka harus dikonversi ke string terlebih
dahulu:
1. x=1
2. type(x)
Output:
<type 'int'>
1. str(x).zfill(5)
Output:
'00001'
Contoh:
1. p = 'Hello world!'
2. p = p.upper()
3. p
Output:
'HELLO WORLD!'
1. p = p.lower()
2. p
Output:
'hello world!'
Berbeda dengan fungsi sort() yang mengubah variabel secara langsung, lower() dan
upper() akan mengembalikan string baru. Sehingga Anda perlu menampungnya dalam variabel.
upper() dan lower() umumnya digunakan untuk memiliki perbandingan yang bersifat
case-insensitive. ‘Dicoding’, ‘DIcoding’, atau ‘DICODING’ tidak sama satu dengan lainnya,
namun Anda bisa memastikan karakternya sama jika Anda menggunakan upper() atau lower()
saat membandingkan:
1. p = 'Hello world!'
2. p.islower()
Output:
False
1. p.isupper()
Output:
False
1. 'HELLO'.isupper()
Output:
True
1. 'abc12345'.islower()
Output:
True
1. '12345'.islower()
Output:
False
1. '12345'.isupper()
Output:
False
Karena fungsi upper() dan lower() mengembalikan string, maka Anda dapat melakukan
operasi pada hasil operasinya (chain of method), contohnya:
1. print('Hello'.upper())
2. print('Hello'.upper().lower())
3. print('Hello'.upper().lower().upper())
4. print('HELLO'.lower())
5. print('HELLO'.lower().islower())
Output:
'HELLO'
'hello'
'HELLO'
'hello'
True
isalpha() mengembalikan True jika string berisi hanya huruf dan tidak kosong.
isalnum() mengembalikan True jika string berisi hanya huruf atau angka, dan tidak kosong.
isdecimal() mengembalikan True jika string berisi hanya angka/numerik dan tidak kosong.
isspace() mengembalikan True jika string berisi hanya spasi, tab, newline, atau whitespaces
lainnya dan tidak kosong.
istitle() mengembalikan True jika string berisi kata yang diawali huruf kapital dan dilanjutkan
dengan huruf kecil seterusnya.
Contoh:
1. 'hello'.isalpha()
Output:
True
1. 'hello123'.isalpha()
Output:
False
1. 'hello123'.isalnum()
Output:
True
1. 'hello'.isalnum()
Output:
True
1. '123'.isdecimal()
Output:
True
1. ' '.isspace()
Output:
True
True
Output:
True
Output:
False
Output:
False
Metode isX akan membantu misalnya dalam validasi input user. Anda bisa mencobanya
dengan contoh berikut. Bukalah file baru pada notepad atau IDE, dan simpan sebagai
validateInput.py
1. while True:
2. print('Enter your age:')
3. age = input()
4. if age.isdecimal():
5. break
6. print('Please enter a number for your age.')
7. while True:
8. print('Select a new password (letters and numbers only):')
9. password = input()
10. if password.isalnum():
11. break
12. print('Passwords can only have letters and numbers.')
Pada perulangan while yang pertama, program akan meminta usia pengguna. Jika valid,
maka program akan berlanjut ke perulangan while kedua yang meminta password dengan
spesifikasi alphanumeric (angka dan huruf). Ketika dijalankan akan seperti berikut:
Output:
forty two
42
secr3t!
Secr3t
Dengan cukup memanggil isdecimal() dan isalnum(), Anda dapat menyingkat waktu
untuk melakukan validasi input user.
1. 'Hello world!'.startswith('Hello')
Output:
True
1. 'Hello world!'.endswith('world!')
Output:
True
1. 'abc123'.startswith('abcdef')
Output:
False
1. 'abc123'.endswith('12')
Output:
False
Output:
True
Output:
True
Fungsi/method ini akan sangat efisien jika Anda hanya perlu membandingkan awal atau
akhir string, tanpa perlu melakukan splitting dan menggunakan statement perbandingan sama
dengan (==).
Output:
Output:
'MyABCnameABCisABCSimon'
Perhatikan bahwa string yang dioperasi dengan fungsi join() akan ditambahkan/disisipkan di
antara setiap parameter/argument. Misalnya koma pada ‘cats, rats, bats’. Sebaliknya metode
split() memisahkan substring berdasarkan delimiter tertentu (defaultnya adalah whitespace -
spasi, tab, atau newline):
Output:
1. 'MyABCnameABCisABCSimon'.split('ABC')
Output:
Output:
1. a = '''Dear Alice,
2. How have you been? I am fine.
3. There is a container in the fridge
4. that is labeled "Milk Experiment".
5. Please do not drink it.
6. Sincerely,
7. Bob'''
8. a.split('\n')
Output:
['Dear Alice,',
'How have you been? I am fine.',
'There is a container in the fridge',
'that is labeled "Milk Experiment".', '',
'Please do not drink it.',
'Sincerely,',
'Bob']
1. 'Hello'.rjust(10)
Output:
' Hello'
1. 'Hello'.rjust(20)
Output:
' Hello'
1. 'Hello World'.rjust(20)
Output:
1. 'Hello'.ljust(10)
Output:
'Hello '
Contohnya: 'Hello'.rjust(10) dapat diartikan sebagai kita ingin menuliskan Hello dalam mode
rata kanan dengan total panjang string 10. Karena panjang ‘Hello’ adalah 5 karakter, maka 5
spasi akan ditambahkan di sebelah kiri. Selain spasi, Anda juga bisa menambahkan karakter lain
dengan mengisikan parameter kedua pada fungsi rjust() atau ljust():
1. 'Hello'.rjust(20, '*')
Output:
'***************Hello'
1. 'Hello'.ljust(20, '-')
Output:
'Hello---------------'
Metode center() seperti namanya akan membuat teks Anda rata tengah:
1. 'Hello'.center(20)
Output:
1. 'Hello'.center(20, '=')
Output:
'=======Hello========'
Jika Anda memprogram aplikasi berbasis konsol (CLI), maka fungsi-fungsi di atas akan
sangat berguna saat membuat tabulasi/tabel.
Hapus Whitespace dengan strip(), rstrip(), dan lstrip()
Saat Anda menerima string sebagai parameter, seringkali masih terdapat karakter whitespace
(spasi, tab, dan newline) di bagian awal dan atau akhir string yang dimaksud. Metode strip() akan
menghapus whitespace pada bagian awal atau akhir string. lstrip() dan rstrip() akan menghapus
sesuai dengan namanya, awal saja atau akhir saja:
Output:
'Hello World'
1. spam.lstrip()
Output:
1. spam.rstrip()
Output:
Anda juga bisa menentukan mana karakter atau bagian yang ingin dihilangkan, misalnya:
1. spam = 'SpamSpamBaconSpamEggsSpamSpam'
2. spam.strip('ampS')
Output:
'BaconSpamEggs'
Saat mengirimkan ‘ampS’ sebagai argumen strip, maka Python akan menghapus setiap
huruf a, m, p dan S kapital dari string yang dioperasikan. Urutan untuk parameter ini tidak
berpengaruh, sehingga strip('ampS') akan berlaku sama dengan ('mapS') atau strip('Spam').
Mengganti string/substring dengan replace()
replace() adalah satu fungsi python yang mengembalikan string baru dalam kondisi substring
telah tergantikan dengan parameter yang dimasukkan:
Output:
Parameter ketiga pada replace dapat diisi jumlah substring yang ingin diganti.
Output:
Sebelumnya pada pembahasan urutan (sequences), Anda sudah mengetahui bahwa slicing
digunakan untuk urutan. Salah satu fungsi yang paling bermanfaat untuk List atau String adalah
len() yang akan menghitung panjang atau banyaknya elemen dari List (untuk String menjadi
menghitung jumlah karakternya).
1.
l = [1,2,3,3,4,4,4,4,5,6]
2. s = set(l)
3. x = "Hello, World"
4.
5. print(l)
6. print(len(l))
7.
8. print(s)
9. print(len(s))
10.
11. print(x)
12. print(len(x))
Output:
[1, 2, 3, 3, 4, 4, 4, 4, 5, 6]
10
{1, 2, 3, 4, 5, 6}
6
Hello, World
12
Penggabungan dan Replikasi
Pada List juga dimungkinkan adanya penggabungan (+) dan replikasi (*).
Output:
Output:
1. spam = [1, 2, 3]
2. spam = spam + ['A', 'B', 'C']
3. spam
Output:
1. arr = [0]*10
2. len(arr)
3. arr
Output:
10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Range
Fungsi range() memberikan deret bilangan dengan pola tertentu. Untuk melakukan
perulangan (misalnya for) dalam mengakses elemen list, Anda dapat menggunakan fungsi
range() pada Python. Lebih detail mengenai operasi perulangan akan dibahas pada modul
Perulangan dan Kontrol Perulangan.
1. Range dengan 1 parameter n: membuat deret bilangan yang dimulai dari 0, sebanyak n bilangan.
1. for i in range(9):
2. print(i)
Output:
0
1
2
3
4
5
6
7
8
2. Range dengan 2 parameter n,p: membuat deret bilangan yang dimulai dari n, hingga sebelum p
(bilangan p tidak ikut). Sering disebut sebagai inklusif n (deret dimulai bilangan n) dan eksklusif
1. for i in range(3, 9):
2. print(i)
Output:
3
4
5
6
7
8
3. Range dengan 3 parameter n,p,q: membuat deret bilangan yang dimulai dari n, hingga
sebelum p (bilangan p tidak ikut), dengan setiap elemennya memiliki selisih q.
1. [_ for _ in range(1, 9, 2)] # list comprehension
Output:
[1, 3, 5, 7]
in dan not in
Untuk mengetahui sebuah nilai atau objek ada dalam list, Anda dapat menggunakan operator
in dan not in. Fungsi ini akan mengembalikan nilai boolean True atau False. Contohnya adalah
sebagai berikut:
Output:
True
Output:
False
Output:
False
Output:
True
Memberikan nilai (assignment) untuk lebih dari 1 variabel
sekaligus
Anda dapat memberikan nilai ke beberapa variabel sekaligus dari element List atau Tuple.
Sehingga tanpa perlu menandai satu-per-satu seperti:
Tentu saja jumlah variabel dan jumlah item pada List/Tuple harus sama. Jika tidak, Python
akan memberikan ValueError. Bagian ini hanya memberikan gambaran tentang operasi pada
List/Tuple, Anda akan mempelajari lebih jauh tentang kesalahan (Error) di modul Penanganan
Kesalahan.
Output:
Tip: Penggunaan assignment pada multi variabel ini dapat Anda gunakan untuk menukar
nilai dua atau lebih variabel:
1. a, b = 'Alice', 'Bob'
2. a, b = b, a
3. print(a)
4. print(b)
Bob
Alice
Sort
List dapat diurutkan dengan method sort(). Contohnya:
Output:
[-7, 1, 2, 3.14, 5]
Output:
Anda dapat memasukkan keyword reverse=True untuk menjadikan urutan yang sebaliknya.
1. y.sort(reverse=True)
2. y
Output:
1. Metode sort langsung melakukan pengurutan pada variabel yang dioperasikannya, sehingga tidak
perlu operasi assignment (=).
2. Metode sort tidak dapat mengurutkan list yang memiliki angka dan string sekaligus di dalamnya.
1. z = [1, 3, 2, 4, 'Alice', 'Bob']
2. z.sort()
Output:
Bagian ini hanya memberikan gambaran tentang operasi sort, Anda akan mempelajari lebih jauh
tentang kesalahan (Error) di modul Penanganan Kesalahan.
Traceback (most recent call last):
File "<pyshell#70>", line 1, in <module>
z.sort()
TypeError: unorderable types: str() < int()
3. Metode sort menggunakan urutan ASCII, sehingga nilai huruf kapital (uppercase) akan lebih
dahulu dibandingkan huruf kecil (lowercase). Contohnya:
1. m = ['Alice', 'ants', 'Bob', 'badgers', 'Carol', 'cats']
2. m.sort()
3. m
Output:
Untuk mengatasi kendala ini, Anda dapat memasukkan keyword str.lower sebagai
argumen metode sort. Hal ini akan membuat metode sort menganggap semua objek
menggunakan huruf kecil, tanpa mengubah kondisi asli dari objek tersebut.
Output:
Manipulasi String
String atau teks adalah salah satu bentuk data yang akan Anda olah dalam program. Anda
dapat melakukan penggabungan, pemisahan, sub-string, penambahan/pengurangan spasi,
konversi huruf kapital, format strings, dan sebagainya.
String Literals
Umumnya, string ditulis dengan mudah di Python, diapit oleh tanda petik tunggal. Tetapi,
dalam kondisi tertentu, dibutuhkan petik tunggal di tengah string (misalnya struktur kepemilikan
dalam Bahasa Inggris - That’s Alice’s Cat). Apabila kita menuliskannya sebagai 'That is Alice's
cat.', maka Python akan salah mengira bahwa string berakhir di Alice, dan selebihnya merupakan
kode yang invalid.
Namun Python memperbolehkan Anda menggunakan petik dua seperti Anda menggunakan
petik tunggal. Dalam kasus sebelumnya, Anda cukup mengetikkan:
Dan dalam contoh tersebut, Python mengenali bahwa petik tunggal adalah bagian tidak
terpisahkan dari string tersebut. Bagaimana jika kita memerlukan kedua jenis petik dalam string
tunggal? Python menyediakan escape character.
Escape Character memungkinkan Anda untuk menggunakan karakter yang sebelumnya tidak
bisa dimasukkan dalam string. Umumnya diawali dengan backslash (\) dan diikuti karakter
tertentu yang diinginkan. Contohnya, untuk petik tunggal Anda dapat menambahkan seperti : \'.
Cara ini merupakan cara paling aman untuk melakukan penambahan atau penyuntingan
dalam variabel. Contohnya sebagai berikut:
Python mengetahui bahwa pada Bob\’s, sebelum petik terdapat backslash (\) yang
menandakan petik tunggal merupakan bagian dari string dan bukan merupakan akhir dari string.
Escape character \' dan \" memungkinkan Anda untuk memasukkan karakter ' dan '' dalam bagian
string. Beberapa contoh Escape Character
Output:
Hello there!
How are you?
I'm doing fine.
Selain tanda kutip dan kutip-dua, untuk penulisan String di Python juga bisa menggunakan 3
kutip-satu atau 3 kutip-dua, yang juga memiliki kemampuan untuk menyimpan String lebih dari
satu baris (multi-line).
Output:
Hello there!
How are you?
I'm fine.
Raw Strings
Sebaliknya, Python juga menyediakan cara untuk memasukkan string sesuai dengan apapun
input atau teks yang diberikan. Metode ini dinamakan Raw Strings. Umumnya digunakan untuk
regex atau beberapa implementasi lain yang sangat bergantung pada keberadaan backslash.
Untuk menjadikan raw string, tambahkan huruf r sebelum pembuka string:
Output:
Tip: Anda dapat melakukan expression tanpa menggunakan variabel secara langsung pada
mode interaktif Python:
1. 2+3
Output:
1. 3*5
Output:
15
Jenis-jenis operator
Matematika dan string
+ (tambah)
o Menambahkan dua objek.
o 3 + 5 menghasilkan 8
o 'a' + 'b' menghasilkan 'ab'.
- (kurang)
o Mengurangkan operand kedua dari operand pertama. Jika hanya satu operand,
diasumsikan nilai operand pertama adalah 0.
o -5.2 adalah expression yang sama dengan 0 - 5.2 menghasilkan -5.2.
o 50 - 24 menghasilkan 26.
o Tidak berlaku untuk string, akan menghasilkan error unsupported operand.
* (perkalian)
o Mengembalikan hasil perkalian angka atau mengembalikan string yang diulang sejumlah
tertentu.
o 2 * 3 menghasilkan 6.
o 'la' * 3 menghasilkan 'lalala'.
** (pangkat)
o Mengembalikan operand pertama pangkat operand kedua.
o 3 ** 4 menghasilkan 81 (sama dengan 3 * 3 * 3 * 3).
/ (pembagian)
o Mengembalikan hasil pembagian operand pertama dengan operand kedua (float).
o 13 / 3 menghasilkan 4.333333333333333.
// (pembagian habis dibagi / div)
o Mengembalikan hasil pembagian operand pertama dengan operand kedua (bilangan
bulat), kecuali jika salah satu operand adalah float, akan menghasilkan float.
o 13 // 3 menghasilkan 4.
o -13 // 3 menghasilkan -5.
o 9//1.81 menghasilkan 4.0.
% (modulo)
o Mengembalikan sisa bagi.
o 13 % 3 menghasilkan 1.
o -25.5 % 2.25 menghasilkan 1.5.
Operasi Bit
<< (left shift)
o Menggeser representasi bit/binary dari operand pertama sebanyak operand kedua ke kiri.
o 2 << 2 menghasilkan 8.
2 direpresentasikan sebagai 10 dalam binary.
Geser ke kiri sebanyak 2x, menjadi 1000 (tambahkan 0 di belakangnya).
o 1000 dalam binary bernilai 8 dalam desimal.
>> (right shift)
o Menggeser representasi bit/binary dari operand pertama sebanyak operand kedua ke
kanan.
o 11 >> 1 menghasilkan 5.
11 direpresentasikan sebagai 1011 dalam binary.
Geser ke kanan sebanyak 1x, menjadi 101.
o 101 dalam binary bernilai 5 dalam desimal.
& (bit-wise AND)
o Menjalankan operasi binary AND pada representasi operand pertama dan kedua.
o 5 & 3 menghasilkan 1.
Representasi binary 5 adalah 101 dan representasi binary 3 adalah 011.
101 and 011 bernilai 001.
o 001 dalam desimal adalah 1.
| (bit-wise OR)
o Menjalankan operasi binary OR pada representasi operand pertama dan kedua.
o 5 | 3 menghasilkan 7.
Representasi binary 5 adalah 101 dan representasi binary 3 adalah 011.
101 or 011 bernilai 111.
o 111 dalam desimal adalah 7.
^ (bit-wise XOR)
o Menjalankan operasi binary XOR pada representasi operand pertama dan kedua.
o 5 ^ 3 menghasilkan 6.
Representasi binary 5 adalah 101 dan representasi binary 3 adalah 011.
101 xor 011 bernilai 110.
o 110 dalam desimal adalah 6.
~ (bit-wise invert)
o Menjalankan operasi binary invert pada representasi operand.
o Nilai invert dari x adalah -(x+1), menggunakan metode Two’s Complement
o ~5 menghasilkan -6.
o Lebih lanjut mengenai Two’s Complement dapat dibaca
pada https://en.wikipedia.org/wiki/Two%27s_complement
Perbandingan
< atau operator.lt (less than)
o Menjalankan perbandingan apakah operand pertama lebih kecil dari operand kedua.
o 5 < 3 menghasilkan False and 3 < 5 menghasilkan True.
o Perbandingan dapat berisi lebih dari dua operand, misalnya 3 < 5 < 7 menghasilkan True.
> atau operator.gt (greater than)
o Menjalankan perbandingan apakah operand pertama lebih besar dari operand kedua.
o 5 > 3 menghasilkan True.
<= atau operator.le (less than or equal to)
o Menjalankan perbandingan apakah operand pertama lebih kecil atau sama dengan
operand kedua.
o x = 3; y = 6;
x <= y menghasilkan True.
>= atau operator.ge (greater than or equal to)
o Menjalankan perbandingan apakah operand pertama lebih besar atau sama dengan
operand kedua.
o x = 4; y = 3;
x >= y menghasilkan True.
== atau operator.eq (equal to)
o Menjalankan perbandingan apakah operand pertama sama dengan operand kedua.
o x = 2; y = 2;
x == y menghasilkan True.
o x = 'str'; y = 'stR';
x == y menghasilkan False.
o x = 'str'; y = 'str';
x == y menghasilkan True.
!= atau operator.ne (not equal to)
o Menjalankan perbandingan apakah operand pertama tidak sama dengan operand kedua.
o x = 2; y = 3;
x != y returns True.
a=1
b = 5.0
lt(a, b): True
le(a, b): True
eq(a, b): False
ne(a, b): True
ge(a, b): False
gt(a, b): False
Boolean Operator
not (boolean NOT)
o Jika x bernilai True, fungsi akan mengembalikan nilai False.
o Jika x bernilai False, fungsi akan mengembalikan nilai True.
o x = True;
not x akan mengembalikan nilai False.
and (boolean AND)
o x AND y akan mengembalikan nilai False jika x bernilai False, atau fungsi akan
mengembalikan nilai y.
o x = False; y = True;
x AND y, Fungsi akan mengembalikan nilai False karena x bernilai False.
Dalam kasus ini, Python tidak akan mengevaluasi nilai y karena apapun nilai y
tidak akan mempengaruhi hasil. Hal ini dinamakan short-circuit evaluation.
or (boolean OR)
o x OR y, Jika x bernilai True, fungsi akan mengembalikan nilai True, atau fungsi akan
mengembalikan nilai dari y.
o x = True; y = False;
x OR y, fungsi akan mengembalikan nilai True.
Dalam kasus ini, Python juga menggunakan short-circuit evaluation karena
apapun nilai y tidak akan mempengaruhi hasil.
Cara singkat menuliskan operasi
Jika Anda melakukan assignment kembali hasil sebuah expression, beberapa di antaranya bisa
disingkat sebagai berikut:
1. a=2
2. a=a*3
1. a=2
2. a *= 3
Operator Description
or Boolean OR
in, not in, is, is not, <, <=, >, >=, !=, == Comparisons, including membership tests and identity tests
| Bitwise OR
^ Bitwise XOR
** Exponentiation
(expressions...), [expressions...], {key: Binding or tuple display, list display, dictionary display, set display
value...},{expressions...}
Tips: Gunakan kurung untuk memudahkan keterbacaan dan memastikan urutan secara
tepat.
Operator di Python juga bersifat asosiatif dari kiri ke-kanan. Artinya, semua operator yang
memiliki tingkatan yang sama akan dijalankan berurutan dari kiri ke kanan.
J. Pengecekan Style Guide PEP8 dan Memformat Kode
Sampai dengan saat ini, Anda tentu sudah menuliskan kode pemrograman Python cukup
banyak, termasuk di antaranya kode yang Anda tulis mengalami kesalahan sintaksis atau
indentasi. Lalu bagaimana agar ke depan bisa mencegah hal tersebut terjadi?
Bergantung dengan editor yang Anda gunakan untuk menulis kode Python, dimana salah satu
fitur yang memudahkan penulisan, sehingga menghemat banyak waktu untuk memformat kode
sesuai arahan gaya penulisan (style guide) PEP8 dan mengecek akan kemungkinan terjadinya
kesalahan (error) pada kode yang ditulis. Untuk itu akan dijelaskan sejumlah aplikasi yang dapat
Anda gunakan, dengan memanggil perintah atau sebaiknya diintegrasikan ke editor kode yang
Anda pakai, dengan tujuan untuk membantu Anda mengecek kemungkinan kesalahan dan
kesesuaian dengan PEP8.
Lint
Lint adalah proses pengecekan kode atas kemungkinan terjadi kesalahan (error), termasuk
dalam proses ini adalah mengecek kesesuaian terhadap arahan gaya penulisan kode (style guide)
PEP8. Aplikasi yang digunakan untuk proses ini disebut linter. Integrasi linter dengan editor
kode Anda akan membuat efisien dalam menulis kode Python. Pertimbangan ini karena keluaran
dari aplikasi linter hanya berupa teks singkat berupa keterangan dan kode Error atau Warning
atau Kesalahan Konvensi Penamaan (Naming Conventions), akan dicontohkan selanjutnya.
Dengan lint atau linting akan meminimalkan kode Anda mengalami error, sebagai contoh
salah satunya karena kesalahan indentasi di Python. Sebelum kode Anda diprotes
oleh interpreter Python dengan IndentationError, lint akan memberitahukannya lebih dahulu ke
Anda.
Berikut akan dibahas 3 jenis aplikasi linter, silakan dicermati dahulu, tidak harus semuanya
diinstal/dicoba, hanya paket yang menurut Anda sesuai kebutuhan saja yang digunakan. Hasil
keluarannya mungkin mirip, tapi pada kondisi tertentu akan ada keluaran atau fitur yang
mungkin sesuai dengan kebutuhan Anda saya menulis kode.
Pycodestyle (sebelumnya bernama pep8)
Pycodestyle adalah aplikasi open source (berlisensi MIT/Expat) untuk membantu mengecek
kode terkait gaya penulisan kode dengan konvensi PEP8.
Untuk instalasi menggunakan manajer paket pip sebagai berikut: pip install pycodestyle.
Pylint
Pylint adalah aplikasi open source (berlisensi GPL v2) untuk melakukan analisis kode
Python, mengecek untuk kesalahan (error) pemrograman, memaksakan standar penulisan kode
dengan mengecek penulisan kode yang tidak baik, serta memberikan saran untuk refactoring
sederhana.
Untuk instalasi menggunakan manajer paket pip sebagai berikut: pip install pylint.
Flake8
Flake8 adalah aplikasi open source (berlisensi MIT) yang membungkus sejumlah
kemampuan aplikasi lain seperti pycodestyle, pyflakes, dan sejumlah (skrip/fitur) lainnya.
Untuk instalasi menggunakan manajer paket pip sebagai berikut: pip install flake8.
Selanjutkan kita akan membahas sebuah contoh kode class sederhana yang akan diproses
lint, misal disimpan dalam sebuah file kal.py. Perhatikan di baris 5, kolom 5 dan kolom 10.
Jika diproses dengan pycodestyle. Menunjukkan error (E301) di baris 5 kolom 5, serta error
(E112) di baris 7 kolom 5.
1. pycodestyle kal.py
2. kal.py:5:5: E301 expected 1 blank line, found 0
3. kal.py:7:5: E112 expected an indented block
Jika diproses dengan pylint. Menunjukkan error (E0001) di baris 7 kolom 10.
1. pylint kal.py
2. ************* Module kal
3. kal.py:7:10: E0001: invalid syntax (<unknown>, line 7) (syntax-error)
Jika diproses dengan flake8. Menunjukkan error (E301) di baris 5 kolom 5, error (E112) di
baris 7 kolom 5, serta error (E999) di baris 7 kolom 10.
1. flake8 kal.py
2. kal.py:5:5: E301 expected 1 blank line, found 0
3. kal.py:7:5: E112 expected an indented block
4. kal.py:7:10: E999 IndentationError: expected an indented block
Setelah kodenya diperbaiki, kali ini diubah secara manual dengan mengetikkan, pada
pembahasan berikutnya mengenai memformat kode akan menangani hal ini dengan otomatis.
1. """kalkulator"""
2.
3. class Kalkulator:
4. """kalkulator tambah kurang"""
5. def __init__(self, _i):
6. self.i = _i
7.
8. def tambah(self, _i): return self.i + _i
9.
10. def kurang(self, _i):
11. return self.i - _i
Kemudian diproses kembali dengan pycodestyle dan flake8 tidak memunculkan pesan lagi.
Diproses dengan pylint menghasilkan peringatan tentang lebih dari satu pernyataan
(statement) dalam satu baris, serta kedua fungsi belum dilengkapi dengan dokumentasi. Hasilnya
pylint memberikan skor 5.71 dari 10.
K. Memformat Kode
Jika proses lint atau linting hanya melakukan pengecekan, terkait arahan gaya penulisan kode
Anda bisa menggunakan aplikasi tambahan untuk memformat kode agar sesuai PEP8. Sehingga
untuk Anda yang menggunakan editor kode yang sangat ringan dan ringkas fitur sekalipun,
misalnya tanpa fasilitas lint, tetap bisa menghasilkan kode sesuai konvensi PEP8.
Proses memformat kode dengan menggunakan aplikasi, cukup sederhana, setelah melakukan
instalasi, akan muncul perintah dengan nama yang sama dengan nama aplikasinya. Kemudian
perintah itu dapat dieksekusi untuk memformat satu file ataupun satu direktori kode Python.
Berikut akan dibahas 3 jenis aplikasi untuk memformat kode, silakan dicermati dahulu, tidak
harus semuanya diinstal, hanya paket yang menurut Anda sesuai kebutuhan saja yang digunakan.
Black
Black adalah proyek open source yang dikembangkan di repository Python Software
Foundation (PSF) dengan lisensi MIT. Untuk mendapatkan gambaran, versi online (tidak resmi)
ada di https://black.now.sh.
Untuk instalasi menggunakan manajer paket pip sebagai berikut: pip install black.
YAPF adalah proyek open source yang dikembangkan di repository Google, dengan lisensi
Apache.
Untuk instalasi menggunakan manajer paket pip sebagai berikut: pip install yapf.
Autopep8
Autopep8 adalah proyek open source (berlisensi MIT) yang termasuk paling awal untuk
memformat kode, dengan bantuan lint pycodestyle. Untuk instalasi menggunakan manajer paket
pip sebagai berikut: pip install autopep8
Kita akan menggunakan contoh kode sebelumnya kal.py yang berisi class Kalkulator, versi
awal sebelum diperbaiki dan dicek dengan linter, sebagai berikut.
1. class Kalkulator:
2. """kalkulator tambah kurang"""
3. def __init__(self, _i=0):
4. self.i = _i
5. def tambah(self, _i): return self.i + _i
6. def kurang(self, _i):
7. return self.i - _i
Berikut adalah hasil kode diproses dengan black, dengan mengeksekusi perintah: black
kal.py
1. class Kalkulator:
2. """kalkulator tambah kurang"""
3.
4. def __init__(self, _i=0):
5. self.i = _i
6.
7. def tambah(self, _i):
8. return self.i + _i
9.
10. def kurang(self, _i):
11. return self.i - _i
Kemudian jika diproses dengan yapf, tidak langsung mengubah isi file kal.py tetapi tampil ke
layar, dengan mengekseskusi perintah: yapf kal.py.
1. class Kalkulator:
2. """kalkulator tambah kurang"""
3. def __init__(self, _i=0):
4. self.i = _i
5.
6. def tambah(self, _i):
7. return self.i + _i
8.
9. def kurang(self, _i):
10. return self.i - _i
Sama dengan yapf, untuk pemrosesan dengan autopep8, tidak langsung mengubah isi file
kal.py tetapi tampil ke layar, dengan mengeksekusi perintah: autopep8 kal.py
1. class Kalkulator:
2. """kalkulator tambah kurang"""
3.
4. def __init__(self, _i=0):
5. self.i = _i
6.
7. def tambah(self, _i): return self.i + _i
8.
9. def kurang(self, _i):
10. return self.i - _i
Setelah mempelajari kedua mekanisme: pengecekan gaya penulisan (style guide) dan proses
memformat kode, Anda tinggal fokus dengan penulisan indentasi dalam kode Python, untuk
format sisanya dapat dibantu oleh aplikasi-aplikasi yang telah kita pelajari di atas.
Jika Anda menulis dengan editor kode yang sangat sederhana, anggap saja seperti notepad di
Windows atau pico/nano di Linux, maka dalam menuliskan kode Python cukup perhatikan
indentasi untuk setiap baris pernyataan (statement). Setelah selesai menuliskan kodenya, simpan
kodenya sebagai file .py, lalu eksekusi perintah linter atau langsung eksekusi perintah aplikasi
untuk memformat kode. Hasilnya, kode Anda sudah dirapikan sesuai arahan gaya penulisan
PEP8 juga dilakukan pengecekan terhadap kemungkinan kesalahan (jika Anda lakukan linting).
Untuk Anda yang mengikuti instalasi editor kode PyCharm pada modul Persiapan, secara
bawaan sudah menggunakan fitur inspeksi dengan kemampuan yang kurang lebih sama,
meskipun jika Anda mau, bisa juga menambahkan aplikasi lint yang sudah dijelaskan sebagai
tambahan dari yang bawaan. Demikian juga untuk fitur format ulang kode juga tersedia secara
bawaan di aplikasi PyCharm.
L. Python Basic (2/2)
Statement gabungan
Usahakan untuk tidak menggabungkan >1 statement pada baris yang sama.
Disarankan:
1. if foo == 'blah':
2. do_blah_thing()
3. do_one()
4. do_two()
5. do_three()
Tidak disarankan:
Anda diperbolehkan untuk membuat sebuah konten/isi dari if/for/while yang cukup pendek
untuk diletakkan dalam satu baris (program tetap berjalan). Namun pastikan tidak melakukannya
jika if/for/while Anda bertingkat atau bersifat multi clause, misalnya if-else, try-finally, dan
sebagainya.
Tidak disarankan:
Koma di bagian akhir (trailing commas) umumnya bersifat opsional, satu statemen dimana ia
bersifat wajib adalah saat kita membuat variabel menggunakan tipe tuple dengan satu elemen.
Hal ini umumnya diperjelas dengan kurung untuk menghindari penghapusan atau pembersihan.
Disarankan:
1. FILES = ('setup.cfg',)
1. FILES = 'setup.cfg',
Saat trailing comma bersifat redundan, Anda akan merasakan kemudahannya saat
menggunakan VCS, atau pada kode yang mungkin Anda tambahkan dalam beberapa waktu
kedepan. Pola yang disarankan adalah meletakkan nilai atau string pada sebuah baris baru,
mengikuti indentasi yang ada, dan menambahkan trailing comma, dan menutup
kurung/kurawal/siku pada baris selanjutnya.
Tidak umum jika Anda meletakkan trailing comma pada baris di mana Anda menutup
kurung/kurawal/siku, kecuali dalam tuple dengan satu elemen.
Disarankan:
1. FILES = [
2. 'setup.cfg',
3. 'tox.ini',
4. ]
5. initialize(FILES,
6. error=True,
7. )
Tidak disarankan:
Penggunaan anotasi fungsi sebaiknya menggunakan aturan baku untuk titik dua (:) dan
menggunakan spasi untuk penggunaan ->. Hal ini dijelaskan lebih lanjut di PEP 484.
1. Yes:
2. def munge(input: AnyStr): ...
3. def munge() -> AnyStr: ...
4.
5. No:
6. def munge(input:AnyStr): ...
7. def munge()->PosInt: …
Tidak menggunakan tanda sama dengan (=) untuk mengindikasikan keyword argumen atau
nilai dasar/default pada parameter fungsi tanpa menggunakan anotasi.
1. Yes:
2. def complex(real, imag=0.0):
3. return magic(r=real, i=imag)
4.
5. No:
6. def complex(real, imag = 0.0):
7. return magic(r = real, i = imag)
Ketika melakukan kombinasi argumen anotasi dan nilai dasar/default, Anda justru disarankan
untuk menggunakan spasi sebelum dan setelah tanda =.
1. Yes:
2. def munge(sep: AnyStr = None): ...
3. def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...
4.
5. No:
6. def munge(input: AnyStr=None): ...
7. def munge(input: AnyStr, limit = 1000): …
Penamaan
Penamaan pada pustaka (library) Python agak sulit dibuat konsisten, mengingat jumlah
paketnya sudah banyak dan terdapat beberapa library eksternal yang sudah tidak lagi dikelola.
Namun, berikut adalah beberapa rekomendasi untuk penamaan. Modul dan Paket-paket yang
baru (termasuk framework) sebaiknya ditulis dengan standar baru ini. Namun Anda juga dapat
memilih mempertahankan styling pada pustaka lama yang sudah Anda gunakan sebelumnya.
Sekali lagi, konsistensi internal lebih diutamakan.
Prinsip Overriding
Nama yang dilihat oleh user publik (misalnya API) sebaiknya merefleksikan
penggunaan/fungsinya, tidak merefleksikan implementasinya. Misal nama fungsi
1. cariJalan()
1. aStarSearch()
Penamaan Deskriptif
Terdapat berbagai cara penamaan. Akan sangat membantu jika Anda telah memilih sebuah
cara penamaan, terlepas bagaimana cara tersebut digunakan. Beberapa cara penamaan yang
umum, antara lain:
Penggunaan frase atau huruf pada awal fungsi ini tidak disarankan pada Python, atau lebih
tepatnya tidak dibutuhkan, karena struktur pada Python:
Beberapa bentuk khusus yang umum ditemukan (dapat digabungkan dengan case
convention):
ASCII
Identifiers yang digunakan pada library standar harus ASCII-Compatible - lihat PEP
3131.
Nama Kelas
Gunakan CamelCase atau CapWords convention. Pastikan semua akronim (misal HTTP)
ditulis keseluruhan dengan huruf besar.
1. T, AnyStr, Num
Jika terdapat covariant atau contravariant dari sebuah variabel, tambahkan di akhir variabel
untuk mempermudah pembacaan.
Jika nama argument fungsi merupakan reserved keyword, tambahkan garis bawah di
akhir nama argument. Jangan mengorbankan keterbacaan nama dengan menyingkatnya.
Mengganti argumen bernama class dengan class_ atau kelas, lebih baik daripada clss, misalnya.
Konstanta
Konstanta umumnya didefinisikan pada bagian atas modul dengan huruf besar, misalnya
MAX_OVERFLOW dan TOTAL.
Selalu Persiapkan untuk Inheritance
Saat sebuah metode dan variabel dalam sebuah kelas didefinisikan, sebaiknya Anda dapat
langsung mengetahui atribut pada metode dan variabel tersebut, apakah publik atau non-publik.
Jika Anda ragu, jadikan atributnya non-publik. Karena lebih mudah menjadikan sebuah
variabel/method bersifat non-publik menjadi publik, dibandingkan sebaliknya
Kategori lain dari atribut adalah "subclass API", umumnya disebut protected pada bahasa
lain. Sebuah kelas dapat didesain untuk diwariskan (inherited-from), misalnya untuk
memodifikasi atau menjadi ekstensi dari perilaku (behavior) kelas. Dalam mendesain kelas-kelas
sejenis, pastikan untuk membuat keputusan eksplisit, mana Variabel/Method yang memiliki
atribut publik, bagian dari subclass API, dan mana yang hanya anda gunakan secara internal.
Sebuah interface otomatis dianggap internal, jika namespace (paket, modul, atau kelasnya)
bersifat internal.
Nama yang di-import harap selalu dianggap sebagai detail implementasi. Modul lainnya
tidak diperbolehkan untuk melakukan akses tidak langsung untuk nama-nama tersebut, kecuali
jika sudah didokumentasikan, misalnya os.path atau modul __init__ yang mengekspos
fungsionalitas dari submodul.
M. Percabangan
Beberapa contoh aplikasi dasar untuk pengenalan percabangan yang sering digunakan adalah:
If
Seperti bahasa pemrograman lainnya, Python juga memiliki statemen percabangan IF. Di
Python, expression diletakkan setelah if, dan keputusan ditentukan berdasarkan nilai kebenaran
dari expression tersebut.
Tip: Python menganggap setiap nilai non-zero dan non-null sebagai True dan nilai zero/null
sebagai False.
Jika expression dievaluasi sebagai True, maka blok statement di dalam if statement akan
dieksekusi. Sesuai konvensi, blok ini memiliki indentasi masuk setelah tanda titik dua (:). Jika
expression dievaluasi sebagai False, maka blok selanjutnya (setelah statement IF) yang akan
dijalankan. Contoh:
1. var1 = 100
2. if var1:
3. print ("1 - Got a true expression value")
4. print (var1)
5. var2 = 0
6. if var2:
7. print ("2 - Got a true expression value")
8. print (var2)
Output:
Anda dapat menyingkat penulisan statement yang akan dieksekusi jika ia terwakili dalam 1
baris. Misalnya:
1. if var3: do_something()
Else
Statement Else dapat dikombinasikan dengan IF Statement, sebagai jalan keluar saat kondisi
/ hasil evaluasi bernilai False. Else bersifat opsional dan tunggal.
Output 1:
Output 2:
1. a=8
2. if a % 2 == 0:
3. print('bilangan {} adalah genap'.format(a))
4. else:
5. print('bilangan {} adalah ganjil'.format(a))
Output:
Output 1:
Output 2:
Output 3:
Pada #Case 2, elif dan else tidak pernah dijalankan karena pembayaran berapapun (yang
bernilai positif) akan selalu masuk pada IF (klausa pertama).
1. a=0
2. if a > 0:
3. print('bilangan {} adalah positif'.format(a))
4. elif a < 0:
5. print('bilangan {} adalah negatif'.format(a))
6. else:
7. print('bilangan {} adalah nol'.format(a))
Output:
IF Ternary
Opsi lain dari ternary operators melibatkan tuples. Contoh kodenya berikut:
IF Ternary_Tuples
Pada tuple ini, dimanfaatkan nilai [0] sebagai False dan [1] sebagai True.
Aplikasi kedua ini menurut beberapa aktivis kurang ‘pythonic’, salah satunya karena cukup
membingungkan untuk meletakkan klausa saat True atau False. Selain itu, kedua nilai akan tetap
dievaluasi walaupun hanya dibutuhkan salah satunya. Lihat contoh berikut:
1. condition = True
2. print(2 if condition else 1/0)
3. #Output is 2
4. print((1/0, 2)[condition])
5. #ZeroDivisionError is raised
Ternary-tuples sebaiknya dihindari, terutama untuk kode (dan klausa True/False) yang
kompleks. Ternary dapat digunakan untuk menyingkat kode saat klausa True/False Anda cukup
pendek - misalnya sebuah fungsi tanpa parameter.
ShortHand Ternary
Selain Ternary Operators, dikenal juga shorthand ternary tag yang mungkin membantu Anda
untuk memeriksa kode/hasil dari sebuah fungsi dan memastikan outputnya tidak menyebabkan
error (atau minimal memberikan informasi relevan saat error):
1. output = None
2. msg = output or "No data returned"
3. print(msg)
Output:
No data returned
N. Perulangan
For
Seperti di bahasa pemrograman lainnya, Python juga memiliki fungsi for. Bedanya di
Python, For tidak hanya untuk perulangan dengan jumlah finite (terbatas), melainkan lebih ke
fungsi yang dapat melakukan perulangan pada setiap jenis variabel berupa kumpulan atau urutan.
Variabel yang dimaksud bisa berupa list, string, ataupun range. Jika sebuah list atau urutan berisi
expression, maka Ia akan dievaluasi terlebih dahulu. Kemudian item pertama pada urutan/list
akan diassign sebagai variabel iterating_var. Setelahnya, blok statement akan dieksekusi,
berlanjut ke item berikutnya, berulang, hingga seluruh urutan habis.
Output:
Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : h
Current Letter : o
Current Letter : n
Current fruit : banana
Current fruit : apple
Current fruit : mango
Anda juga dapat melakukan perulangan berdasarkan indeks atau range dengan memanfaatkan
fungsi len():
Output:
Seperti for dan semua statement percabangan, blok statement yang mengikuti kondisi
while dan memiliki posisi indentasi yang sama, dianggap blok statement yang akan dieksekusi.
Contoh:
1. count = 0
2. while (count < 5):
3. print('The count is: {}'.format(count))
4. count = count + 1
Output:
1. var = 1
2. while var == 1: # This constructs an infinite loop
3. num = input('Enter a number: ')
4. print('You entered: {}'.format(num))
5.
6.
7. while True: # This constructs an infinite loop
8. num = input('Enter a number: ')
9. print('You entered: {}'.format(num))
Potongan kode di atas tidak akan pernah bernilai False karena nilai var tidak pernah berubah.
Untuk menghentikan infinite loop, gunakan CTRL (atau CMD⌘) - C untuk menghentikannya
dan keluar dari program.
Anda juga dapat menyingkat penulisan blok statement While jika statement Anda cukup
terwakili oleh satu baris.
Perulangan Bertingkat
Ada kalanya Anda perlu untuk melakukan perulangan bertingkat, misalnya untuk
menghasilkan contoh print-out berikut:
*****
****
***
**
*
Anda dapat melakukannya dengan kode berikut:
Tip: Tambahkan parameter end pada print untuk mengatur karakter yang mengakhiri
pencetakan string/teks Anda. Secara default, karakter end ini adalah newline ('\n').
O. Kontrol Perulangan
Break
Pernyataan break menghentikan perulangan kemudian keluar, dilanjutkan dengan
mengeksekusi pernyataan (statement) setelah blok perulangan. Salah satu penggunaannya yang
paling sering adalah sebuah kondisi eksternal yang membutuhkan program untuk keluar dari
perulangan. Jika Anda memiliki perulangan bertingkat, break akan menghentikan perulangan
sesuai dengan tingkatan atau di perulangan mana ia berada. Namun jika ia diletakkan di
perulangan dengan kedalaman kedua misalnya, hanya perulangan itu saja yang berhenti, tidak
dengan perulangan utama.
Contoh 1:
Output contoh 1:
Current Letter : P
Current Letter : y
Current Letter : t
Contoh 2:
Output contoh 2:
Contoh 1:
Output contoh 1:
Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : o ##perhatikan huruf h dilewati
Current Letter : n
Contoh 2:
Output contoh 2:
Elemen positif: 1
Elemen positif: 2
Elemen positif: 3
Contoh 3:
Output contoh 3
Anda mungkin melihat sesuatu yang menarik. Ada If dan Else, namun dalam tingkatan yang
berbeda, apakah mereka terkait? Saat sebuah perulangan dijalankan, fungsi if akan dievaluasi.
Saat ia pernah sekali saja benar, maka else tidak akan dieksekusi. Dengan kata lain, if yang
berada dalam perulangan harus selalu salah untuk memicu blok statemen else dijalankan. Lebih
singkat lagi.
Contoh penggunaan dari for-else dapat dilihat pada potongan kode berikut (jalankan di
konsol sebelum melanjutkan ke bagian selanjutnya):
Potongan kode di atas melakukan pencarian faktor dari setiap bilangan antara 2 s/d 9. Namun
demikian, pada saat bilangan n bernilai 2, 3, 5, 7, program tidak akan mencetak apapun. Ini
karena bilangan-bilangan tersebut merupakan bilangan prima. Hal ini bisa diatasi dengan
menambahkan keterangan else:
1. n=5
2. while n > 0:
3. n=n-1
4. if n == 2:
5. break
6. print(n)
7. else:
8. print("Loop is finished")
Pass
Digunakan jika Anda menginginkan sebuah pernyataan atau blok pernyataan (statement),
namun tidak melakukan apapun - melanjutkan eksekusi sesuai dengan seharusnya. Kontrol ini
banyak digunakan saat Anda belum melakukan implementasi (dan mengisi pernyataan dengan
seharusnya), serta membiarkan program tetap berjalan saat misalnya Anda mengalami kegagalan
atau exception.
Pass statement adalah operasi bersifat Null (kosong), tidak ada yang terjadi saat ia dipanggil.
Contohnya:
Current Letter : P
Current Letter : y
Current Letter : t
This is pass block
Current Letter : h
Current Letter : o
Current Letter : n
Output:
Lower letter: y
Lower letter: t
Lower letter: h
Lower letter: o
Lower letter: n
1. var1=""
2. while(var1!="exit"):
3. var1=input("Please enter an integer (type exit to exit): ")
4. print(int(var1))
Output:
1. import sys
2. data=''
3. while(data!='exit'):
4. try:
5. data=input('Please enter an integer (type exit to exit): ')
6. print('got integer: {}'.format(int(data)))
7. except:
8. if data == 'exit':
9. pass # exit gracefully without prompt any error
10. else:
11. print('error: {}'.format(sys.exc_info()[0]))
Pada pendekatan kedua, program akan memberitahu kegagalan yang terjadi sesuai
dengan yang kita tuliskan pada baris berwarna kuning, namun tetap terus berjalan, dalam hal ini
hingga dituliskan exit. Anda dapat melakukan antisipasi apapun sebelum menulis pass (misalnya
memasukkan informasi terkait error ke log, memberi notifikasi ke admin, dan sebagainya).
List Comprehension (membuat list dengan inline loop
dan if)
Ada kalanya Anda perlu untuk membuat sebuah list baru dari dengan sebuah operasi dari list
sebelumnya. Misalnya membuat nilai kuadrat dari semua item dalam list:
1. #Cara 1
2. numbers = [1, 2, 3, 4]
3. squares = []
4. for n in numbers:
5. squares.append(n**2)
6. print(squares)
Cara yang umum digunakan adalah cara di atas, yakni melakukan perulangan sejumlah item
pada list numbers, kemudian membuat list baru (squares) dan menambahkan hasil operasinya
dalam list baru (squares). Bandingkan dengan cara berikut:
Output:
[1, 4, 9, 16]
List comprehension adalah salah satu cara untuk menghasilkan list baru berdasarkan list atau
iterables yang telah ada sebelumnya. Sintaksis dasarnya adalah sebagai berikut:
Contoh kedua di atas dapat diartikan sebagai: untuk setiap anggota numbers, buatlah nilai
kuadratnya. List comprehension dapat digunakan lebih lanjut, misalnya:
1. #Contoh3 menemukan bilangan yang ada di kedua list
2. list_a = [1, 2, 3, 4]
3. list_b = [2, 3, 4, 5]
4. common_num = []
5. for a in list_a:
6. for b in list_b:
7. if a == b:
8. common_num.append(a)
9.
10. print(common_num) # Output [2, 3, 4]
Bandingkan dengan:
Sangat memudahkan bukan? Dari 5 baris cukup disingkat menjadi 1 baris saja. Contoh
penggunaan yang lain dapat dilihat pada contoh 5 berikut:
Anda tidak perlu bingung saat melihat kode di Internet yang menuliskan seperti contoh di
atas, karena garis bawah (underscore) termasuk penamaan variabel yang valid.
Banyak hal yang mungkin dilakukan dengan list comprehension. Coba perkirakan apa yang
akan dimunculkan oleh potongan kode berikut dan pilih jawaban yang tepat pada kuis di bagian
berikutnya:
1. Kesalahan sintaksis (syntax errors) atau sering disebut kesalahan penguraian (parsing
errors)
2. Pengecualian (exceptions) atau sering disebut kesalahan saat beroperasi (runtime errors)
Kesalahan sintaksis terjadi ketika Python tidak dapat mengerti apa yang Anda perintahkan.
Sedangkan pengecualian (kesalahan saat beroperasi) terjadi ketika Python mengerti apa yang
Anda perintahkan tetapi mendapatkan masalah saat mengikuti yang Anda perintahkan (terjadi
saat aplikasi sudah mulai beroperasi).
Kesalahan Sintaksis
Kesalahan sintaksis biasanya sering terjadi saat Anda masih baru memulai belajar Python,
misalnya contoh berikut adalah penempatan indentasi (spasi di awal) yang tidak sesuai.
1. print('salah indentasi')
2. File "<stdin>", line 1
3. print('salah indentasi')
4. ^
5. IndentationError: unexpected indent
Contoh berikut ini menampilkan kesalahan sintaksis, dimana setelah kondisi dari
perintah while diharuskan ada tanda titik dua (:).
Pada kesalahan sintaksis, baris dimana kesalahan terdeteksi dimunculkan kembali, kemudian
terdapat tanda panah yang menunjukkan titik paling awal dari kesalahan.
Kedua contoh di atas memiliki kelompok (tipe) kesalahan yang berbeda, yang pertama
adalah IndentationError dan yang kedua adalah SyntaxError. Kemudian setelah penyebutannya,
ada pesan detail kesalahan (keterangan), misalnya indentasi yang tidak diharapkan (unexpected).
Jika Anda menggunakan mode pemanggilan skrip, nama file skrip dan nomor baris dimana
terjadi kesalahan akan dimunculkan. Sedangkan untuk mode interaktif pada dua contoh di atas,
nama file muncul sebagai “<stdin>”. Berikut adalah contoh pada pemanggilan skrip bernama
contoh_salah_sintaksis.py dimana terjadi kesalahan pada baris 2.
1. python contoh_salah_sintaksis.py
2. File "contoh_salah_sintaksis.py", line 2
3. if True print('salah sintaksis')
4. ^
5. SyntaxError: invalid syntax
Pengecualian
Meski pernyataan atau ekspresi dari Python sudah Anda tulis dengan benar, ada
kemungkinan terjadi kesalahan ketika perintah tersebut dieksekusi. Kesalahan yang terjadi saat
proses sedang berlangsung disebut pengecualian (exceptions) dan akan berakibat fatal jika tidak
ditangani. Kebanyakan pengecualian di Python tidak ditangani oleh aplikasi, sehingga aplikasi
terhenti kemudian muncul pesan kesalahan seperti contoh berikut.
1. print(angka)
2. Traceback (most recent call last):
3. File "<stdin>", line 1, in <module>
4. NameError: name 'angka' is not defined
Misalkan Anda lupa memberikan nilai pada variabel angka, tetapi Anda langsung memanggil
variabel tersebut. Secara sintaksis sudah sesuai, tapi muncul pengecualian dengan kelompok
(tipe) kesalahan NameError dan pesan detail kesalahan yang menyatakan bahwa variabel angka
tidak terdefinisi.
Contoh lain terkait pengecualian yang sering juga terjadi adalah operasi dari variabel yang
jenisnya tidak sesuai, misalnya contoh berikut.
1. bukan_angka = '1'
2. bukan_angka + 2
3. Traceback (most recent call last):
4. File "<stdin>", line 1, in <module>
5. TypeError: can only concatenate str (not "int") to str
Pada contoh tersebut, variabel bukan_angka berjenis string, sehingga saat mengoperasikan
variabel tersebut dengan angka (berjenis integer), meskipun secara sintaksis sudah sesuai,
muncul pengecualian dengan kelompok (tipe) kesalahan TypeError dan pesan detail kesalahan
yang menyatakan bahwa operasi penambahan untuk string (contatetation) hanya bisa dilakukan
jika kedua operannya adalah string (dan bukan integer).
Seperti terlihat bahwa pada saat terjadi pengecualian, informasi yang muncul seperti saat
terjadi kesalahan (errors), termasuk juga informasi nama file dan nomor baris dimana kesalahan
terjadi.
Untuk mengetahui berbagai jenis pengecualian bawaan dari Python, bisa kunjungi situs
dokumentasi https://docs.python.org/id/3.8/library/exceptions.html
Q. Penanganan Pengecualian
Pada aplikasi Python yang Anda buat bisa dilengkapi dengan penanganan terhadap
pengecualian (exceptions handling) dari kelompok (tipe) kesalahan yang Anda tentukan. Proses
penanganan pengecualian menggunakan pernyataan try yang berpasangan dengan except.
Misalnya kita ingin menangani pengecualian yang terjadi jika ada pembagian angka dengan
nilai nol (0).
1. z=0
2. 1/z
3. Traceback (most recent call last):
4. File "<stdin>", line 1, in <module>
5. ZeroDivisionError: division by zero
6.
7. try:
8. ... x = 1 / z
9. ... print(x)
10. ... except ZeroDivisionError:
11. ... print('tidak bisa membagi angka dengan nilai nol')
12. ...
13. tidak bisa membagi angka dengan nilai nol
Pernyataan except dilanjutkan dengan kelompok (tipe) kesalahan yang ingin ditangani, atau
bisa juga berupa tuple dari satu atau lebih tipe kesalahan yang akan ditangani. Di contoh berikut,
menangani FileNotFoundError sebagai tuple satu elemen, jangan lupa dalam menuliskan tuple
satu elemen harus tetap diakhiri dengan koma.
1. >>> try:
2. ... with open('contoh_tidak_ada.py') as file:
3. ... print(file.read())
4. ... except (FileNotFoundError, ):
5. ... print('file tidak ditemukan')
6. ...
7. file tidak ditemukan
Pada operasi di atas, aplikasi akan membuka dan mengakses file bernama
contoh_tidak_ada.py, tetapi file tersebut tidak ada di direktori dimana aplikasi Python tersebut
berada, selanjutnya akan terjadi pengecualian (exceptions) tetapi ditangani, dalam pasangan
pernyataan try dan except, sehingga aplikasi tidak terhenti tetapi tercetak di layar bahwa file
tidak ditemukan.
Pada contoh tersebut, yang paling awal terjadi pengecualian untuk tipe kesalahan KeyError
karena dalam dictionary d tidak memiliki kunci (key) rata_rata, yang ada adalah kunci ratarata.
Kemudian contoh selanjutnya terjadi pengecualian untuk tipe kesalahan TypeError karena
nilai d[‘ratarata’] memiliki tipe string, sehingga tidak dapat dibagi dengan integer (angka) 3.
Dalam penanganan kesalahannya, satu buah pernyataan except menangani tipe
kesalahan ValueError atau TypeError, sehingga cocok salah satunya akan menampilkan ke layar
bahwa nilai atau tipe tidak sesuai.
Di bagian paling akhir contoh, terjadi pengecualian untuk tipe kesalahan ValueError karena
berusaha melakukan konversi (casting) dari sebuah string ke integer dengan format yang tidak
sesuai (bilangan bulat seharusnya tidak memiliki titik dalam penulisannya). Dalam penulisan
penanganan kesalahannya digunakan variasi lain untuk mendapatkan pesan kesalahan sebagai
variabel e untuk kemudian variabel tersebut dicetak dalam pesan yang ditampilkan ke layar.
Bentuk lengkap dari pernyataan try dapat dilihat pada bagan berikut, terdiri dari
pernyataan except, else, finally.
Menghasilkan Pengecualian
Dalam membuat aplikasi, ada kemungkinan Anda butuh untuk menghasilkan pengecualian
(raise exceptions), salah satu caranya bisa dengan menggunakan pengecualian yang sudah ada,
hanya ditambahkan informasi detailnya saja.
Misalnya dalam contoh berikut, Anda mewajibkan sebuah dictionary memiliki kunci (key)
total.
Mendefinisikan fungsi
Fungsi didefinisikan dengan keyword def diikuti dengan nama fungsi dan parameternya
dalam kurung (). Secara opsional, Anda dapat menambahkan docstring - string dokumentasi dari
fungsi. Blok kode dalam setiap fungsi dimulai dengan titik dua dan menggunakan indentasi.
Fungsi berhenti ketika terdapat statement return [expression]. Mengembalikan [expression]
kepada pemanggilnya. Sebuah return statement yang tidak membawa [expression] apapun sama
dengan return None.
Secara default, Python akan memposisikan setiap parameter sesuai dengan urutan
pendaftaran pada saat didefinisikan, dan harus dipanggil sesuai dengan urutan tersebut. Contoh:
Fungsi berikut akan menerima sebuah string sebagai parameter dan mencetaknya.
Sintaksis return tanpa ekspresi dapat juga tidak dituliskan. Fungsi di atas akan sama seperti di
bawah ini.
1. def printme(str):
2. print(str)
Memanggil Fungsi
Mendefinisikan sebuah fungsi hanya memberikan namanya, menentukan parameter yang
ingin menjadi bagian dari fungsi dan struktur dasar kode tersebut. Setelah struktur dasar
terpenuhi, Anda dapat memanggilnya pada fungsi yang lain atau dari Python prompt. Contoh
berikut untuk memanggil fungsi printme().
Output:
Panggilan Pertama
Panggilan Kedua
Return
Pernyataan return [expression] akan membuat eksekusi program keluar dari fungsi saat itu,
sekaligus mengembalikan nilai tertentu. Nilai return yang tidak mengembalikan (ekspresi) nilai
bersifat sama dengan contoh di bawah ini.
1. return None
Saat dipanggil:
Nilai kembalian dari sebuah fungsi dapat disimpan dalam sebuah variabel. Ini yang akan
membedakan sebuah fungsi yang mengembalikan nilai dengan sebuah fungsi yang tidak
mengembalikan nilai (sering disebut sebagai prosedur).
1. def kuadrat(x):
2. return x*x
3. a = 10
4. k = kuadrat(a)
5. print('nilai kuadrat dari {} adalah {}'.format(a, k))
Pass by reference vs value
Seluruh parameter (argumen) pada bahasa Python bersifat “passed by reference”. Artinya
saat Anda mengubah sebuah variabel, maka data yang mereferensi padanya juga akan berubah,
baik di dalam fungsi, maupun di luar fungsi pemanggil. Kecuali jika anda melakukan operasi
assignment yang akan mengubah reference parameter.
Contohnya:
1. def changeme(mylist):
2. mylist.append([1, 2, 3, 4])
3. print('Nilai di dalam fungsi: {}'.format(mylist))
4.
5. # Panggil changeme
6. mylist = [10, 20, 30]
7. changeme(mylist)
8. print('Nilai di luar fungsi: {}'.format(mylist))
Dapat dilihat dalam kode diatas, objek yang direferensi adalah sama. Sehingga nilai tersebut:
Reference parameter mylist diperbarui dalam fungsi changeme dengan operator assignment
(sama dengan), sehingga nilai mylist akan berbeda karena bersifat lokal dalam fungsi changeme
saja. Hasilnya akan sebagai berikut:
Required arguments : Argumen yang wajib disertakan dan disusun secara terurut dalam
pemanggilan fungsi.
Keyword arguments : Argumen yang ditambahkan dengan menyertakan nama
variabel/keywordnya dalam pemanggilan fungsi.
Default arguments : Argumen yang bersifat tidak wajib diisi, karena telah memiliki nilai
default.
Variable-length arguments : Argumen yang bersifat opsional namun dapat disesuaikan
banyaknya dan tidak didefinisikan secara spesifik dalam definisi fungsi.
Untuk memanggil fungsi printme(), Anda wajib menyertakan satu parameter string saat
pemanggilan. Misalnya Anda tidak menyertakan parameter -- hanya memanggil printme.
1. printme()
Bagian ini hanya memberikan gambaran tentang pemanggilan fungsi, Anda akan mempelajari
lebih jauh tentang kesalahan (Error) di modul Penanganan Kesalahan.
My String
Jika Anda memanggil fungsi dengan argumen kata kunci (keyword) atau dengan
menyebutkan nama variabelnya, Anda tidak wajib meletakkan urutan variabel sesuai dengan
urutan saat fungsi didefinisikan. Contoh:
1. def printinfo(name, age):
2. "This prints a passed info into this function"
3. print('Name: ', name)
4. print('Age: ', age)
5.
6. # Now you can call printinfo function (with age argument first)
7. printinfo(age=5, name="Dicoding")
Name: Dicoding
Age: 5
Sebuah fungsi yang memiliki sejumlah argumen, dapat diatur nilai bawaannya (default),
agar pada saat pemanggilan nilainya bisa menjadi opsional untuk diisi.
Argumen dengan nilai bawaan harus didefinisikan setelah argumen yang tidak memiliki nilai
bawaan.
Name: Dicoding
Age: 5
Name: Data
Age: 35
Output:
Bagian ini hanya memberikan gambaran tentang pemanggilan fungsi, Anda akan
mempelajari lebih jauh tentang kesalahan (Error) di modul Penanganan Kesalahan.
Contoh Implementasi Variable-length arguments
Contoh Implementasi argument dengan panjang yang dinamis (variable-length). Seperti yang
telah dijelaskan, sebuah fungsi dapat memiliki argumen posisi juga argumen kata kunci
(keyword). Keduanya memiliki kemampuan untuk bersifat dinamis, sehingga masukan fungsi
dan panjang argumen dapat berubah-ubah.
Argumen posisi dapat bersifat dinamis dengan menambahkan sintaksis tanda bintang (*),
untuk menampung kontainer (Tuple). Kontainer (Tuple) ini bisa bersifat opsional, artinya tidak
wajib diisi (boleh kosong), jika memang tidak ada argumen yang perlu ditambahkan. Pada saat
diisi, seperti layaknya Tuple dapat memiliki jumlah/panjang yang dinamis.
Output: fixedarg 10
Output: fixedarg 70
argumen posisi 60
argumen posisi 50
Argumen kata kunci (keyword) dapat bersifat dinamis dengan menambahkan sintaksis
dua tanda bintang (**) untuk menampung kontainer (Dictionary).
Kontainer (Dictionary) ini bisa bersifat opsional, artinya tidak wajib diisi (boleh kosong), jika
memang tidak ada argumen yang perlu ditambahkan. Pada saat diisi, seperti layaknya Dictionary
dapat memiliki jumlah/panjang yang dinamis, dengan pasangan kunci-nilai (key-value) yang
bervariasi. Jika ada argumen posisi dinamis dan argument kata kunci (keyword) dinamis, maka
urutannya adalah argumen posisi dahulu, baru argumen kata kunci.
1. def printinfo(*args, **kwargs):
2. for a in args:
3. print('argumen posisi {}'.format(a))
4. for key, value in kwargs.items():
5. print('argument kata kunci {}:{}'.format(key, value))
6.
7.
8. # Panggil printinfo
9. printinfo()
10. printinfo(1, 2, 3)
11. printinfo(i=7, j=8, k=9)
12. printinfo(1, 2, j=8, k=9)
13. printinfo(*(2, 3), **{'i':7, 'j':8})
Output:
argumen posisi 1
argumen posisi 2
argumen posisi 3
argumen posisi 1
argumen posisi 2
argumen kata kunci j:8
argumen kata kunci k:9
argumen posisi 2
argumen posisi 3
argumen kata kunci i:7
argumen kata kunci j:8
Fungsi Anonim
Fungsi Anonim (anonymous) tidak dideklarasikan seperti halnya fungsi pada umumnya
dengan kata kunci def, melainkan menggunakan kata kunci (keyword) lambda. Sebuah fungsi
lambda dapat menerima argumen dalam jumlah berapa pun, namun hanya mengembalikan satu
nilai expression. Fungsi Lambda tidak dapat memuat perintah atau ekspresi lainnya, misalnya
tidak bisa melakukan print.
Fungsi lambda bersifat mandiri, memiliki namespace-nya sendiri, dan tidak dapat
mengakses nilai apapun selain yang berada dalam parameter list dan variabel global. Meskipun
mirip, Lambda tidak dapat disamakan dengan inline statement pada bahasa C/C++.
Sintaks:
Contoh penggunaannya:
1. #!/usr/bin/python
2. sum = lambda arg1, arg2: arg1 + arg2;
Hasilnya
Value of total : 30
Value of total : 40
Cakupan Variabel
Variabel dapat didesain untuk diakses atau tidak dapat diakses dalam lokasi atau cakupan
(scope) tertentu. Hal ini bergantung lokasi Anda mendeklarasikan variabel. Cakupan variabel
secara umum dibagi menjadi dua, yakni variabel Lokal dan variabel Global.
Variabel yang didefinisikan dalam fungsi bersifat lokal (di fungsi tersebut), dan
yang didefinisikan di luar fungsi bersifat global. Perbandingkan kode berikut pada bagian
yang ditebalkan dan keluarannya.
Artinya, variabel Lokal hanya dapat diakses dan dioperasikan dalam fungsi tempat variabel
tersebut dideklarasikan.
Output:
Penggunaan variabel global dinilai sebagai praktek yang tidak baik dalam pemrograman,
karena tingkat kesulitan saat pencarian kesalahan (debugging) untuk variabel yang memiliki
cakupan global akan lebih rumit dibanding variabel lokal.
Output:
Module Python adalah berkas teks berekstensi .py yang berisikan kode Python. Anda dapat
mereferensi berkas .py apa pun sebagai modul. Modul-modul umum yang disediakan
oleh Python Standard Library dan mungkin sudah terinstal secara default pada instalasi Python
Anda. PIP juga dapat dimanfaatkan untuk menginstal modul atau library berikut dengan
dependensi yang dibutuhkannya. Anda pun dapat membuat dan menghasilkan modul Python
Anda sendiri.
Menulis Modul
Menuliskan modul pada bahasa Python dapat dimulai dengan menuliskan definisi fungsi,
kelas, dan variabel yang dapat digunakan kembali pada program lainnya. Misalkan saja kita
membuat berkas hello.py yang akan kita panggil di berkas lain.
hello.py
1. # Define a function
2. def world():
3. print("Hello, World!")
Jika hello.py dijalankan, maka program tidak akan menjalankan apapun karena world()
hanya berupa definisi fungsi, kita belum memanggilnya. Jika kita biasanya memanggil sebuah
fungsi dari berkas yang sama di bagian main, kali ini kita akan membuat berkas lain main.py
yang seolah mengimpor hello.py. Pastikan hello.py dan main.py berada dalam satu direktori agar
dapat diimpor dan dipanggil.
main.py
1. #impor
2. import hello
3.
4. #panggil
5. hello.world()
Saat memanggil sebuah fungsi dari modul yang kita impor, jangan lupa untuk menambahkan
nama modulnya diikuti tanda titik, baru fungsi yang akan kita panggil. Dalam hal ini karena kita
mengimpor hello.py, maka cukup kita tulis import hello, dan saat memanggilnya dengan
hello.world(). Selain itu, kita juga dapat menggunakan from ... import ..., dalam hal ini adalah
from hello import world dan memanggil fungsinya langsung yakni world().
Sekarang, saat memanggil main.py, maka akan menghasilkan:
Hello, World!
Menambahkan variabel
Menambahkan variabel pada modul hello, tambahkan variabel nama, misalnya Dicoding.
hello.py
1. def world():
2. print("Hello, World!")
3.
4. nama = "Dicoding"
main.py
1. #impor
2. import hello
3.
4. #panggil
5. hello.world()
6.
7. #cetak
8. print(hello.nama)
Saat Dijalankan:
Hello, World!
Dicoding
Menambahkan kelas
Contoh yang lain, mari tambahkan kelas di modul hello. Kita akan membuat kelas
Reviewer dengan atribut nama dan kelas, serta fungsi review() yang akan mencetak atribut yang
telah didefinisikan.
hello.py
1. def world():
2. print("Hello, World!")
3.
4. nama = "Dicoding"
5.
6. class Reviewer:
7. def __init__(self, nama, kelas):
8. self.nama = nama
9. self.kelas = kelas
10.
11. def review(self):
12. print("Reviewer " + self.nama + " bertanggung jawab di kelas " + self.kelas)
main.py
1. #impor
2. import hello
3.
4. #panggil
5. hello.world()
6.
7. #cetak
8. print(hello.nama)
9.
10. #review
11. diko = hello.Reviewer("Diko", "Python")
12. diko.review()
Seperti umumnya kelas pada bahasa pemrograman lainnya, Fungsi dan Atributnya dapat
diakses setelah kita melakukan instansiasi. Fungsi Review adalah fungsi yang melekat pada kelas
Reviewer. Kita juga dapat memanggil diko.Nama atau diko.Kelas sebagai atribut yang melekat
di kelas tersebut.
Output:
Hello, World!
Dicoding
Reviewer Diko bertanggung jawab di kelas Python
Lihat kedua variabel "nama" yang dapat menghasilkan dua nilai berbeda, karena nama
yang pertama (hello.nama) melekat pada modul, sementara diko. Nama adalah atribut nama pada
kelas Reviewer. Anda harus cukup berhati-hati dalam memastikan variabel seperti pada
pembahasan fungsi yang lalu.
Implementasi Kode
Seringkali, modul dimanfaatkan untuk dapat memisahkan antara definisi dan
implementasi kode. Namun modul juga dapat berfungsi selayaknya program pada umumnya,
yang juga langsung mengeksekusi dalam modul itu sendiri. Contohnya, kita buat hello2.py
seperti berikut:
hello2.py
1. # Definisi
2. def world():
3. print("Hello, World!")
4.
5. # Panggil disini
6. world()
main_program.py
1. import hello2
Hello, World!
Sehingga modul dapat digunakan dengan berbagai metode pemanggilan, bergantung pada
definisi, maupun implementasi.
Mengakses Modul dari Folder Lain
Jika Anda bekerja dengan beberapa proyek secara paralel, berikut adalah opsi untuk
mengakses modul dari folder lain:
Opsi ini dipilih umumnya di tahap awal pengembangan, sebagai solusi temporer. Untuk
mengetahui path pemanggilan utama, Anda perlu bantuan dari modul sys yang sudah tersedia.
Impor modul sys di main program dan gunakan fungsi sys.path.append. Berikut contoh jika
berkas hello.py kita berada di direktori /home/dicoding/ dan main.py di direktori lainnya, pada
Anda akan menambahkan path /home/dicoding pada main.py dengan cara:
1. import sys
2. sys.path.append('/home/dicoding')
3.
4. import hello
5. …
Alternatif ini dapat dipilih saat Anda melakukan pemanggilan modul >1x. Pada intinya
pilihan ini akan menambahkan modul yang Anda buat pada Path yang diperiksa oleh Python
sebagai modul dan paket-paket bawaan. Anda dapat memanfaatkan sys.path kembali untuk
mengetahui posisi Anda saat ini.
1. print(sys.path)
Anda mungkin akan menerima output seperti berikut, sangat bergantung dengan jenis
environment Anda, tapi pilihlah (atau cobalah satu per satu) jika ada beberapa output.
'/home/dicoding/my_env/lib/python3.5/site-packages'
Pindahkan hello.py pada direktori di atas. Maka Ia akan dikenali sebagai sebuah modul
yang dapat diimpor oleh siapa saja dalam environment tersebut.
1. import hello
Pastikan path yang Anda assign tepat untuk menghasilkan pemanggilan yang tepat. Modul
yang tersebar pada beberapa folder mungkin akan menghasilkan galat. Usahakan peletakan yang
se-sederhana mungkin.
T. Pengenalan Pemrograman Berorientasi Objek (OOP)
dengan Python
Kelas atau dalam bahasa Inggris disebut class, merupakan sebuah konsep yang menyediakan
sarana untuk menyatukan data dan fungsionalitas secara satu kesatuan. Membuat sebuah kelas
artinya membuat sebuah tipe baru, kemudian dengan membuat instance dari kelas tersebut akan
menghasilkan objek baru dari tipe tersebut. Setiap objek (hasil instance dari kelas tersebut) dapat
memiliki atribut untuk mengelola status dari objek tersebut, juga dapat memiliki metode untuk
mengubah status atau informasinya.
Catatan: Kata objek adalah terjemahan bahasa Inggris dari kata object.
Kata metode adalah terjemahan bahasa Inggris dari kata method.
Selanjutnya kita akan mempelajari secara mendalam implementasi kelas dan fitur-fitur terkait
di bahasa pemrograman Python.
Class
Class merupakan sintaksis di Python yang menyediakan semua fitur-fitur standar dari
Pemrograman Berorientasi Objek atau dalam bahasa Inggris disebut dengan Object Oriented
Programming (OOP).
Definisi dari kelas menggunakan sintaksis class seperti hanya definisi fungsi yang
menggunakan sintaksis def, kemudian perlu dipanggil (dieksekusi) dahulu sebelum dapat
digunakan dan memiliki efek pada program.
1. class NamaKelas:
2. pass # gantikan dengan pernyataan-pernyataan, misal: atribut atau metode
1. class Kalkulator:
2. """contoh kelas kalkulator sederhana"""
3. i = 12345
4.
5. def f(self):
6. return 'hello world'
Dari pembuatan class Kalkulator di atas, di dalamnya ada definisi atribut i dan definisi
fungsi f.
Proses mengacu atribut yaitu Kalkulator.i dan Kalkulator.f sesuai definisi akan
mengembalikan nilai integer dan fungsi. Pada proses mengacu atribut tersebut juga dapat
mengubah nilainya, misalnya dengan memberikan bilangan bulat lain ke Kalkulator.i akan
mengubah nilai yang ada saat ini.
1. Kalkulator.i = 1024 # maka nilai atribut i dalam Kalkulator berubah dari 12345 menjadi 1024
Berikut ini adalah contoh membuat instance dari class Kalkulator menghasilkan sebuah
objek.
1. k = Kalkulator() # membuat instance dari kelas jadi objek, kemudian disimpan pada variabel k
Sebagai hasil instance sebuah class, suatu objek memiliki atribut dan metode yang
didapatkan dari class. Sebuah metode atau dalam bahasa Inggris disebut method, adalah sebuah
fungsi khusus yang menjadi "milik" suatu objek.
Untuk memanggil metode f dari objek k, hasil instance dari class Kalkulator di atas sebagai
berikut.
Pembahasan lebih lanjut mengenai metode dari class ada di bagian selanjutnya.
Class’ Constructor
Kembali membahas proses instantiation dari class, sering ditemui kebutuhan mengeset
nilai awal atau kondisi awal dari atribut yang dimiliki oleh class tersebut, sehingga untuk
kebutuhan ini digunakan sebuah fungsi khusus yang biasa disebut sebagai pembangun atau
dalam bahasa Inggris disebut constructor. Di Python, fungsi khusus atau metode sebagai
constructor ini bernama __init__ atau biasa diucapkan sebagai "double underscore init". Pada
saat dilakukan instantiation dari class, metode __init__ ini secara otomatis akan dipanggil di
terlebih dahulu.
Berikut adalah definisi class Kalkulator di atas jika diubah dengan menggunakan constructor.
1. class Kalkulator:
2. """contoh kelas kalkulator sederhana"""
3.
4. def __init__(self):
5. self.i = 12345
6.
7. def f(self):
8. return 'hello world'
Nilai dari atribut i tidak terdefinisi pada awal definisi Kalkulator, setelah dilakukan
instantiation maka nilai atribut i akan bernilai 12345. Meskipun bisa mendefinisikan
variabel i sebagai atribut dari class Kalkulator, tetapi sebaiknya berhati-hati mengenai variabel
yang akan terbagi (shared) untuk semua instance dari class, terutama untuk tipe yang dapat
berubah (mutable), misalnya list dan dictionary.
referensi: https://docs.python.org/id/3.8/tutorial/classes.html#class-and-instance-variables
1. class KeranjangBelanja:
2. """contoh tidak baik dilakukan dengan definisi variabel terbagi"""
3. isi = [] # menggunakan list di sini akan terbagi untuk semua instance. JANGAN DILAKUKAN
Lanjut pembahasan constructor, dengan dilengkapi constructor pun proses instantiation tidak
berubah dari sebelumnya.
1. k = Kalkulator() # membuat instance dari kelas jadi objek, kemudian disimpan pada variabel k
Lebih lanjut tentang constructor, tentu saja untuk mendukung aplikasi yang lebih dinamis
maka constructor dapat memiliki parameter yang bisa dikirimkan saat proses instantiation,
bahkan parameternya bisa lebih dari satu jika diperlukan.
Pada contoh berikut ini, constructor memiliki parameter i yang bersifat opsional, apabila
dalam proses instantiation tidak dikirimkan parameter, secara otomatis i akan diisi nilai bawaan
12345.
1. class Kalkulator:
2. """contoh kelas kalkulator sederhana"""
3.
4. def __init__(self, i=12345):
5. self.i = i # i adalah variabel pada constructor, self.i adalah variabel dari class
6.
7. def f(self):
8. return 'hello world'
Metode (Method)
Pembahasan lebih detail mengenai metode, selain yang dibahas sebelumnya, kita akan
membahas 3 jenis metode:
Pertama kita membahas metode dari objek, seperti yang sempat dijelaskan secara singkat di
atas mengenai metode, atau dalam bahasa Inggris disebut method, secara umum metode adalah
sebuah fungsi khusus yang menjadi “milik” suatu objek, yakni hasil instantiation dari class.
Salah satu hal khusus yang dimiliki oleh metode dengan adanya argumen bernama self, Anda
tentu bertanya-tanya tentang argumen self pada metode-metode dalam kelas tersebut sebetulnya
apa?
Argumen pertama dari metode-metode dalam class, biasa diberikan nama self sebagai suatu
konvensi atau standar penamaan, meskipun Anda bisa juga menggunakan nama lain. Bahkan
dalam Python tidak ada arti khusus tentang sintaksis self ini, namun sangat disarankan
menggunakan konversi ini agar program Python yang Anda buat akan lebih mudah dimengerti
oleh pemrogram lainnya.
Seperti yang Anda sudah perkirakan, untuk sebuah metode, sebetulnya dikirimkan objek
(hasil instance dari class) sebagai argumen pertamanya, dalam hal ini bernama self.
Misalnya menggunakan contoh di atas, jika k adalah objek hasil instance dari class
Kalkulator, saat melakukan pemanggilan metode f.
1. k.f()
ekuivalen dengan
1. Kalkulator.f(k)
Argumen self pada metode f akan diisi dengan objek hasil instance dari class Kalkulator.
Sebelum kita membahas yang kedua dan ketiga, yakni metode dari class dan metode secara
static, Anda tentu mengingat bahwa sebelumnya sudah belajar fungsi-fungsi bawaan (built-in)
dari Python, antara lain: open, sorted, int, str, dan sejumlah lainnya. Terkait metode, ada dua
fungsi bawaan yang akan kita bahas, yakni classmethod dan staticmethod.
Catatan:
fungsi decorator adalah sebuah fungsi yang mengembalikan fungsi lain, biasanya
digunakan sebagai fungsi transformasi dengan "pembungkus" sintaksis @wrapper
referensi: https://docs.python.org/id/3.8/glossary.html#term-decorator
Classmethod adalah sebuah fungsi yang mengubah metode menjadi metode
dari class (class method). Dalam penggunaannya, fungsi ini dijadikan sebagai fungsi
decorator @classmethod, kemudian pemanggilannya bisa langsung dari class yang terdefinisi
ataupun melalui objek.
Metode dari class (class method) menerima masukan class secara implisit sebagai argumen
pertama yang secara konvensi diberikan nama cls.
Berdasar contoh yang sama dengan class sebelumnya, berikut adalah metode dari class.
1. class Kalkulator:
2. """contoh kelas kalkulator sederhana"""
3.
4. def f(self):
5. return 'hello world'
6.
7. @classmethod
8. def tambah_angka(cls, angka1, angka2):
9. return '{} + {} = {}'.format(angka1, angka2, angka1 + angka2)
Nampak pada kode, sesuai konvensi ada metode yang menggunakan argumen pertama self,
sedangkan untuk class method menggunakan konvensi argumen pertama cls.
Untuk melakukan pemanggilan dari class, dilakukan seperti berikut, dimana argumen
pertama cls sudah mendapatkan masukan class Kalkulator.
Metode dari class (class method) juga dapat dipanggil dari objek, hasil instantiation dari class
Kalkulator, contohnya mirip seperti pemanggilan metode dari objek (object method).
1. k = Kalkulator()
2. k.tambah_angka(1, 2)
Staticmethod adalah sebuah fungsi yang mengubah metode menjadi metode statis (static
method). Dalam penggunaannya, fungsi ini dijadikan sebagai fungsi decorator @staticmethod,
kemudian pemanggilannya bisa langsung dari class yang terdefinisi ataupun melalui objek.
Metode statis (static method) tidak menerima masukan argumen pertama secara implisit.
Untuk Anda yang pernah memrogram Java atau C++, metode statis ini mirip seperti yang ada
di bahasa pemrograman tersebut.
Berdasar contoh yang sama dengan class sebelumnya, berikut adalah metode statis.
1. class Kalkulator:
2. """contoh kelas kalkulator sederhana"""
3.
4. def f(self):
5. return 'hello world'
6.
7. @staticmethod
8. def kali_angka(angka1, angka2):
9. return '{} x {} = {}'.format(angka1, angka2, angka1 * angka2)
Nampak pada kode, tidak ada argumen pertama yang implisit seperti halnya pada dua metode
sebelumnya.
1. a = Kalkulator.kali_angka(2, 3)
2. print(a)
Metode statis (static method) juga dapat dipanggil dari objek, hasil instantiation dari class
Kalkulator, mirip seperti pemanggilan fungsi biasa meskipun dipanggil dari objek.
1. k = Kalkulator()
2. a = k.kali_angka(2, 3)
3. print(a)
Mekanisme Pewarisan (Inheritance)
Paradigma Pemrograman Berorientasi Objek memiliki konsep pewarisan atau dalam bahasa
Inggris disebut inheritance, tentunya di Python mendukung fitur ini.
Suatu kelas B dapat mewarisi kelas A, sehingga secara otomatis memiliki semua fitur
yang dimiliki oleh kelas A, dalam hal ini atribut-atribut dan metode-metode.
Dalam contoh ini, kelas A disebut sebagai kelas dasar, yakni kelas yang memberikan
warisan atau biasa juga disebut kelas yang diturunkan.
Kemudian kelas B disebut sebagai kelas turunan, yakni kelas yang mendapatkan warisan.
Jika di kelas B memiliki metode dengan nama yang sama dengan yang dimiliki kelas A,
maka metode tersebut akan menimpa metode yang diwariskan dari kelas A.
Catatan: Frasa kelas dasar adalah terjemahan bahasa Inggris dari frasa base class. Frasa
kelas turunan adalah terjemahan bahasa Inggris dari frasa derived class.
Frasa menimpa metode adalah terjemahan bahasa Inggris dari frasa method override.
Di Python, mekanisme pewarisan memungkinkan untuk memiliki lebih dari satu kelas dasar
(kelas orang tua, yang diwarisi).
Referensi: https://docs.python.org/id/3.8/tutorial/classes.html#multiple-inheritance
Kita akan mengembangkan aplikasi yang sudah dimiliki di atas, class Kalkulator sebagai
kelas dasar yang mempunyai fungsi melakukan penambahan melalui metode tambah_angka.
1. class Kalkulator:
2. """contoh kelas kalkulator sederhana. anggap kelas ini tidak boleh diubah!"""
3.
4. def __init__(self, nilai=0):
5. self.nilai = nilai
6.
7. def tambah_angka(self, angka1, angka2):
8. self.nilai = angka1 + angka2
9. if self.nilai > 9: # kalkulator sederhana hanya memroses sampai 9
10. print('kalkulator sederhana melebihi batas angka: {}'.format(self.nilai))
11. return self.nilai
Kemudian kita punya kebutuhan membuat sebuah kelas yang punya fitur perkalian tapi juga
punya fitur penambahan, dalam contoh ini misalnya kita tidak boleh mengubah kalkulator yang
sudah ada. Dibandingkan dengan membuat kelas baru kemudian menuliskan kembali
implementasi penambahan angka, maka mewarisi kelas yang sudah ada akan lebih efisien.
Dari situ, kita membuat class KalkulatorKali yang mewarisi class Kalkulator.
1. class KalkulatorKali(Kalkulator):
2. """contoh mewarisi kelas kalkulator sederhana"""
3.
4. def kali_angka(self, angka1, angka2):
5. self.nilai = angka1 * angka2
6. return self.nilai
1. kk = KalkulatorKali()
2. a = kk.kali_angka(2, 3) # sesuai dengan definisi class memiliki fitur kali_angka
3. print(a)
4.
5. b = kk.tambah_angka(5, 6) # memiliki fitur tambah_angka karena mewarisi dari Kalkulator
6. print(b)
Dengan melakukan pewarisan, Anda dengan mudah bisa menambahkan (extend) kemampuan
dari suatu class dengan fitur yang ingin Anda buat sendiri. Hal tersebut akan sangat berguna jika
Anda ingin membuat aplikasi yang mudah diguna-ulang (reusable).
Dalam proses pewarisan, kita bisa menimpa (override) definisi metode yang dimiliki oleh
kelas dasar (kelas orang tua, yang diwarisi) dengan nama metode yang sama. Misalnya kita
menimpa metode tambah_angka untuk menghilangkan batasan yang dimiliki.
1. class KalkulatorKali(Kalkulator):
2. """contoh mewarisi kelas kalkulator sederhana"""
3.
4. def kali_angka(self, angka1, angka2):
5. self.nilai = angka1 * angka2
6. return self.nilai
7.
8. def tambah_angka(self, angka1, angka2):
9. self.nilai = angka1 + angka2
10. return self.nilai
Kemudian kita coba kembali, apakah batasan yang dimiliki sudah hilang?
1. kk = KalkulatorKali()
2.
3. b = kk.tambah_angka(5, 6) # fitur tambah_angka yang dipanggil milik KalkulatorKali
4. print(b)
Pemanggilan Metode Kelas Dasar dari Kelas Turunan
dengan Sintaksis Super
Anggaplah fungsi tambah_angka adalah sebuah fungsi yang rumit, dimana kita sebaiknya
gunakan saja kemampuan yang sudah ada di kelas dasar, kemudian kita hanya ubah sebagian
fiturnya saja dengan yang kita inginkan.
1. class KalkulatorTambah(Kalkulator):
2. """contoh mewarisi kelas kalkulator sederhana"""
3.
4. def tambah_angka(self, angka1, angka2):
5. if angka1 + angka2 <= 9: # fitur ini sudah oke di kelas dasar, gunakan yang ada saja
6. super().tambah_angka(angka1, angka2) # panggil fungsi dari Kalkulator lalu isi nilai
7. else: # ini adalah fitur baru yang ingin diperbaiki dari keterbatasan kelas dasar
8. self.nilai = angka1 + angka2
9. return self.nilai
Terkait variabel privat tersebut, di Python ada konvensi dimana penggunaan nama yang
diawali dengan garis bawah (underscore), baik itu fungsi, metode, maupun anggota data, akan
dianggap sebagai non-publik.
Pernak-Pernik Terkait Struktur Data
Buat Anda yang pernah membuat program dengan menggunakan bahasa pemrograman C
atau Pascal, Anda mungkin tertarik untuk membuat sebuah struktur data seperti
halnya struct pada C atau record pada Pascal, bertujuan menyatukan sejumlah penamaan item
data menjadi satu.
Dalam Python, dimana Anda sebelumnya pernah mempelajari mengenai duck typing, maka
Anda cukup mendefinisikan saja sebuah class kosong, selanjutnya penamaan item data dapat
secara langsung didefinisikan dan diisikan saat sudah instantiation.
1. class Pegawai:
2. pass # definisi class kosong
3.
4. don = Pegawai() # membuat Pegawai baru menjadi objek bernama don
5.
6. # tambahkan item data pada objek sebagai record
7. don.nama = 'Don Doo'
8. don.bagian = 'IT'
9. don.gaji = 999
Referensi:
https://docs.python.org/id/3.8/tutorial/classes.html