Variabel pada Python bukan kotak bertipe tetap sebagaimana pada bahasa yang mewajibkan deklarasi. Variabel adalah nama yang terikat ke sebuah objek, dan ikatan itu dapat diganti kapan saja. Topik ini membahas cara kerja penugasan, konsekuensi pengetikan dinamis (dynamic typing), aturan penamaan yang sah, serta pengenalan identitas objek melalui fungsi id(). Setelah topik ini dibaca, penulisan variabel yang benar dan penamaan yang rapi dapat diterapkan sejak baris pertama program.
Penugasan mengikat nama ke objek#
Tanda sama dengan dalam Python bukan persamaan matematika, melainkan operator penugasan (assignment). Penugasan tidak menyalin nilai ke dalam variabel, tetapi mengikat nama di sebelah kiri ke objek di sebelah kanan. Objek angka 7 dan nama yang menunjuknya adalah dua hal yang berbeda: nama menunjuk ke objek, bukan sebaliknya.
Tidak ada deklarasi tipe. Nama tercipta pada saat pertama kali diberi nilai, dan penugasan berikutnya mengganti ikatan lama dengan yang baru. Nilai lama tidak ikut berubah karena yang diganti hanyalah ikatan namanya, bukan objeknya.
judul = "Almanak kecil"
jumlah_halaman = 24
print(judul, jumlah_halaman)
jumlah_halaman = jumlah_halaman + 8
print(jumlah_halaman)Almanak kecil 24
32Baris jumlah_halaman = jumlah_halaman + 8 diproses mulai dari sisi kanan tanda sama dengan. Ekspresi di sebelah kanan dihitung lebih dahulu menjadi 32, lalu nama jumlah_halaman diikat ulang ke objek baru itu. Ikatan semacam ini berlaku sama untuk semua tipe, baik angka, string, maupun tipe lain yang ditemui nanti.
Pengetikan dinamis#
Python menentukan tipe dari objeknya, bukan dari namanya. Satu nama yang sama boleh mengikat objek int pada satu saat dan objek string pada saat berikutnya. Sifat ini disebut pengetikan dinamis, dan fungsi type() digunakan untuk memeriksa tipe yang sedang terikat.
nilai = 24
print(nilai, type(nilai))
nilai = "dua puluh empat"
print(nilai, type(nilai))24 <class 'int'>
dua puluh empat <class 'str'>Tipe berpindah bersama penggantian objeknya, sementara namanya tetap. Penggantian tipe seperti ini berguna untuk memahami model bahasanya, tetapi dalam program nyata satu nama sebaiknya dipertahankan untuk satu jenis makna agar kode tetap mudah dibaca.
Aturan penamaan yang sah#
Nama variabel hanya boleh terdiri atas huruf, angka, dan garis bawah, serta tidak boleh diawali angka. Python membedakan huruf besar dan kecil, sehingga Nilai, nilai, dan NILAI adalah tiga nama yang berbeda. Sejumlah kata dipakai oleh sintaks Python untuk keperluannya sendiri dan tidak dapat dijadikan nama, misalnya class, if, dan for.
| Nama | Status | Alasan |
|---|---|---|
nilai_ujian | sah | kombinasi huruf kecil dan garis bawah |
nilai2 | sah | angka boleh muncul setelah karakter pertama |
2nilai | tidak sah | diawali angka |
nilai-ujian | tidak sah | tanda hubung dibaca sebagai operator pengurangan |
class | tidak sah | kata kunci (keyword) milik sintaks Python |
Daftar kata kunci dapat diperiksa melalui modul keyword tanpa harus menghafalnya lebih dahulu.
import keyword
print(keyword.iskeyword("class"))
print(keyword.iskeyword("Class"))
print(keyword.iskeyword("jumlah"))True
False
FalseFungsi iskeyword() mengembalikan True untuk kata kunci. Hasil baris kedua sekaligus menunjukkan bahwa pembedaan huruf besar dan kecil berlaku juga pada kata kunci: class ditolak, sedangkan Class tidak termasuk kata kunci. Sebagai konvensi, nama variabel ditulis dengan huruf kecil dan garis bawah, gaya yang dikenal sebagai snake_case, seperti nilai_ujian pada tabel di atas.
# tidak-dijalankan: keempat baris berikut memicu error sintaks
2nilai = 80
nilai ujian = 80
nilai-ujian = 80
class = "ujian"Identitas objek dan fungsi id()#
Setiap objek yang berada di memori memiliki identitas, yaitu penanda yang membedakannya dari objek lain. Fungsi id() mengembalikan identitas tersebut berupa sebuah angka. Angkanya dijamin unik selama masa hidup objek, tetapi nilainya berbeda pada setiap proses eksekusi, sehingga tutorial tidak menampilkan angkanya dan cukup membandingkannya.
Operator is membandingkan identitas dua nama: hasilnya True apabila keduanya mengikat objek yang sama. Membandingkan hasil id() dua nama dengan == memberikan kesimpulan yang setara. Perbedaan dengan perbandingan nilai adalah sebagai berikut: == membandingkan isi objek, sedangkan is membandingkan ikatannya.
a = 7
b = a
print(a is b)
print(id(a) == id(b))
a = "tujuh"
print(a is b)
print(b)True
True
False
7Awalnya a dan b mengikat objek yang sama, sehingga is dan perbandingan id() sama-sama menghasilkan True. Setelah a diikat ulang ke string tujuh, ikatan b tidak tersentuh dan tetap menunjuk objek 7, sehingga is menghasilkan False. Perilaku ini adalah inti model data Python: penugasan tidak pernah mengubah objek lama, melainkan hanya memindahkan ikatan nama.
Kesalahan umum#
Dua error paling lazim pada variabel sama-sama berkait dengan nama, dan keduanya memicu NameError. Penyebabnya sama, yaitu nama yang dibaca interpreter belum terikat ke nilai apa pun.
- Menggunakan nama sebelum diberi nilai. Interpreter mengeksekusi berkas dari atas ke bawah, sehingga penugasan wajib mendahului pemakaiannya.
- Salah kapital pada nama. Karena Nilai dan nilai berbeda, satu huruf kapital yang keliru langsung diperlakukan sebagai nama lain yang belum terdefinisi.
nilai = 10
try:
print(data_piket)
except NameError as e:
print(type(e).__name__)
print(str(e))NameError
name 'data_piket' is not definedPesan error menyebut nama yang tidak dikenal secara eksplisit, sehingga letak perbaikannya mudah ditemukan. Periksa ejaan dan huruf kapitalnya, lalu pastikan penugasan untuk nama itu sudah ditulis sebelum baris yang memakainya.
Ringkasan#
- Penugasan mengikat nama ke objek tanpa deklarasi, dan ikatan dapat diganti kapan saja tanpa memengaruhi objek lama.
- Tipe melekat pada objek, sehingga satu nama boleh mengikat objek dengan tipe berbeda dari waktu ke waktu, sesuai sifat pengetikan dinamis.
- Nama hanya boleh memuat huruf, angka, dan garis bawah, tidak diawali angka, dan tidak boleh berupa kata kunci.
- id() mengembalikan identitas objek, is membandingkan identitas, sedangkan == membandingkan nilai.
Referensi#
- Data model: Objects, values and types — Python Software Foundation — Menegaskan bahwa setiap objek memiliki identitas, tipe, dan nilai.
- Lexical analysis: Identifiers and keywords — Python Software Foundation — Aturan resmi pembentukan nama dan daftar kata kunci Python.
- Built-in Functions: type() dan id() — Python Software Foundation — Dokumentasi fungsi type() dan id() beserta jaminan perilakunya.