Setiap program yang bermanfaat perlu mengingat nilai: nama pengguna, jumlah stok, atau hasil perhitungan sementara. Di Python, variabel adalah nama yang kita ikatkan ke sebuah object di memori, dan pengikatan tersebut dilakukan lewat pernyataan assignment dengan tanda sama dengan (=). Pada Chapter ini kita akan mempelajari berbagai bentuk assignment yang disediakan Python, mulai dari bentuk paling dasar sampai trik yang membuat kode lebih ringkas.
Membuat Variabel dengan Assignment #
Python tidak mengenal perintah deklarasi variabel seperti var atau let, dan interpreter Python juga tidak menuntut kita menyebut tipe data. Sebuah variabel tercipta pada saat pertama kali diberi nilai melalui assignment. Ketika interpreter Python membaca tanda =, interpreter mengevaluasi ekspresi di sisi kanan terlebih dahulu, kemudian mengikatkan nama di sisi kiri ke hasil evaluasi tersebut.
Mari kita lihat wujudnya dalam kode:
nama = "Budi"
umur = 17
print(nama)
print(umur)Output yang Dihasilkan:
Budi
17Mari kita telaah baris-baris kode di atas:
- Baris 1 (
nama = "Budi"): interpreter mengevaluasi string"Budi"menjadi sebuah object bertipestr, lalu mengikatkan namanamake object tersebut. - Baris 2 (
umur = 17): interpreter membuat object bertipeintbernilai17, lalu mengikatkan namaumurke object itu. - Baris 3 (
print(nama)): fungsiprint()membaca object yang ditunjuknama, lalu mencetakBudike terminal. - Baris 4 (
print(umur)): fungsiprint()mencetak17ke terminal.
Tidak ada tanda khusus di awal nama variabel dan tidak ada tanda titik koma di akhir pernyataan. Pembahasan lebih dalam tentang hubungan antara nama dan object akan kita pelajari pada Chapter Memahami Object dan Reference.
Memberi Nilai Baru (Rebinding) #
Isi variabel dapat diganti kapan saja selama program berjalan. Penugasan terbaru cukup mengarahkan nama tersebut ke object baru; nama-nama lain yang menunjuk ke object lama tidak terpengaruh.
stok = 10
print("Stok awal:", stok)
stok = stok - 4
print("Stok akhir:", stok)Output yang Dihasilkan:
Stok awal: 10
Stok akhir: 6Pada baris stok = stok - 4, interpreter membaca nilai stok yang lama (10), menguranginya dengan 4 menghasilkan object baru bernilai 6, lalu mengikatkan kembali nama stok ke object baru tersebut. Object lama 10 yang sudah tidak ditunjuk nama apa pun pada akhirnya akan dibersihkan dari memori oleh mekanisme garbage collection.
Multiple Assignment, Swap, dan Chained Assignment #
Python menyediakan tiga variasi assignment yang sering dipakai sehari-hari. Multiple assignment memungkinkan beberapa variabel diberi nilai sekaligus dalam satu baris:
x, y = 5, 10
print("Sebelum tukar:", x, y)
x, y = y, x
print("Setelah tukar:", x, y)Output yang Dihasilkan:
Sebelum tukar: 5 10
Setelah tukar: 10 5Pada baris x, y = y, x, interpreter mengevaluasi sisi kanan terlebih dahulu berdasarkan nilai saat itu (10 dan 5), baru kemudian hasilnya diikat ke x dan y. Urutan inilah yang membuat pertukaran nilai dua variabel berjalan mulus tanpa perlu variabel penampung sementara.
Chained assignment mengikatkan beberapa nama sekaligus ke object yang sama:
a = b = 0
print(a, b)
b = 99
print(a, b)Output yang Dihasilkan:
0 0
0 99Pada baris a = b = 0, kedua nama a dan b diarahkan ke object 0 yang sama. Ketika b diikat ulang ke 99, hanya nama b yang berpindah; nama a tetap menunjuk object 0.
Augmented Assignment #
Sering kali nilai baru dihitung dari nilai variabel itu sendiri. Python menyediakan bentuk ringkas yang disebut augmented assignment:
total = 100
total += 50
print(total)
total -= 30
print(total)Output yang Dihasilkan:
150
120Penulisan total += 50 memiliki arti yang sama dengan total = total + 50, hanya lebih ringkas dan lebih sulit salah ketik. Python menyediakan operator serupa untuk aritmetika lainnya (-=, *=, /=, //=, %=, **=); daftar lengkapnya akan kita bahas pada Section Operator dan Expression.
Variabel _ di REPL #
Saat mencoba-coba kode di sesi interaktif (REPL), interpreter Python menyimpan hasil ekspresi terakhir ke variabel khusus bernama _ (satu karakter garis bawah):
>>> 25 * 4
100
>>> _ + 1
101Pada sesi di atas, 25 * 4 menghasilkan 100, lalu _ otomatis menampung nilai tersebut sehingga bisa dipakai pada ekspresi berikutnya. Fitur ini nyaman untuk perhitungan bertahap tanpa harus mendefinisikan nama variabel.