Transisi dari Python 2 ke Python 3 merupakan salah satu perubahan signifikan dalam sejarah bahasa pemrograman Python. Meskipun Python 2 (terutama versi 2.7) telah mencapai akhir masa dukungannya (End-Of-Life/EOL) pada Januari 2020, pemahaman mengenai perbedaannya tetap vital, terutama saat bekerja dengan kode warisan (legacy code) atau sistem lama. Python 3 menawarkan banyak peningkatan, perbaikan konsistensi, dan penghapusan fitur-fitur yang membingungkan di versi sebelumnya.
Ini adalah perbedaan yang paling sering ditemui oleh pemula. Di Python 2, `print` adalah sebuah statement (pernyataan), sedangkan di Python 3, ia diubah menjadi sebuah function (fungsi).
print "Halo Dunia"
print("Halo Dunia")
Perubahan ini membuat sintaks menjadi lebih konsisten dan memungkinkan fleksibilitas yang lebih besar dalam mengarahkan output, seperti menambahkan argumen sep atau end.
Salah satu perbaikan terbesar di Python 3 adalah cara ia menangani teks (string) dan data biner (bytes). Python 3 memisahkan secara ketat antara teks (Unicode) dan data biner.
u (misalnya, u'teks'). Ini sering menyebabkan UnicodeDecodeError.str) adalah Unicode secara default. Untuk data biner, digunakan tipe bytes. Konversi dari bytes ke string (decoding) atau sebaliknya (encoding) harus dilakukan secara eksplisit, menjamin kode lebih aman dan internasional.Cara operator pembagian (/) bekerja juga mengalami perubahan signifikan yang mempengaruhi perhitungan matematis.
Jika di Python 3 Anda tetap ingin mendapatkan hasil pembagian integer seperti di Python 2, Anda harus menggunakan operator pembagian floor (//): 5 // 2 menghasilkan 2.
Di Python 2, fungsi range() mengembalikan sebuah list penuh di memori, yang bisa sangat boros memori untuk rentang angka yang sangat besar. Fungsi xrange() digunakan untuk iterasi yang efisien.
Di Python 3, fungsi range() yang lama telah dirombak total dan kini berperilaku seperti xrange() di Python 2. Ia mengembalikan objek iterator (range object) yang menghasilkan angka sesuai permintaan tanpa memuat seluruh urutan ke dalam memori.
Sintaks untuk menangkap pengecualian (exception) juga diperbarui untuk meningkatkan keterbacaan.
| Fitur | Python 2.x | Python 3.x |
|---|---|---|
| Fungsi Print | Statement (print "a") |
Fungsi (print("a")) |
| Pembagian Integer | 5 / 2 menghasilkan 2 |
5 / 2 menghasilkan 2.5 |
| Default String | Byte (ASCII) | Unicode (str) |
| Range Besar | range() mengembalikan List |
range() mengembalikan Iterator |
| Exception Catching | except E, var |
except E as var |
| Perbandingan Dictionary | Metode .keys() mengembalikan List |
Metode .keys() mengembalikan View Object |
Meskipun proses migrasi memerlukan penyesuaian sintaks, Python 3 menawarkan fondasi yang jauh lebih bersih, aman, dan modern. Peningkatan dalam penanganan Unicode menghilangkan banyak masalah internasionalisasi, sementara peningkatan kinerja dan konsistensi sintaks membuat pengembangan lebih mudah dikelola dalam jangka panjang. Semua pustaka utama dan komunitas telah sepenuhnya berfokus pada Python 3, menjadikannya standar industri saat ini untuk semua proyek baru.
Bagi developer yang masih menghadapi kode Python 2, disarankan untuk menggunakan alat migrasi seperti 2to3 jika memungkinkan, atau merencanakan pembaruan bertahap untuk memastikan kompatibilitas di masa depan.