Python None: Standar untuk Nilai Hilang atau Kosong
Pelajari bagaimana objek None di Python merepresentasikan ketiadaan nilai. Temukan desain internalnya, kasus penggunaan umum, praktik terbaik, dan perbandingannya dengan null di bahasa lain.
Di Python, None adalah cara standar untuk merepresentasikan ketiadaan nilai. Ini muncul saat data hilang, ketika sebuah variabel belum diinisialisasi, atau ketika sebuah fungsi tidak memiliki hasil bermakna untuk dikembalikan. Alih-alih menyisakan ambiguitas, None memberikan sinyal jelas bahwa sesuatu sengaja dibiarkan kosong.
Bahasa lain mengambil pendekatan serupa dengan konstruk seperti null di Java dan JavaScript atau nil di Ruby. Namun, Python mendefinisikan None sebagai singleton dari tipe miliknya sendiri, NoneType, yang selalu diperiksa dengan uji identitas (is None). Ini menjaga perilakunya tetap konsisten dan lugas.
Pada intinya, None adalah satu-satunya instance dari kelas NoneType. Python menerapkan pola singleton di sini: setiap referensi ke None menunjuk ke objek yang sama. Ini menghemat memori dan memastikan bahwa pemeriksaan identitas (is None) andal dan cepat.
Kelas NoneType sengaja dibuat minimal. Kelas ini tidak dapat diturunkan, diperluas, atau diubah. Secara internal, Python memperlakukan None sebagai abadi; ia tidak pernah di-garbage-collect. Pada level C, ini diimplementasikan sebagai Py_None, dengan makro pembantu seperti Py_RETURN_NONE yang digunakan untuk efisiensi dalam ekstensi CPython.
Pola Penggunaan Praktis dan Praktik Terbaik
Penggunaan sehari-hari untuk None adalah sebagai parameter default dalam fungsi. Ini menghindari jebakan argumen default yang bisa berubah:
defappend_item(item, container=None):if container isNone:
container =[]
container.append(item)return containerDidukung oleh
Pola ini mencegah nilai bertahan secara tak terduga antar pemanggilan. Anda juga akan menjumpai None dalam pencarian kamus (dictionary) dan respons API. Sebagai contoh, my_dict.get("key") mengembalikan None ketika key tidak ada. Demikian pula, fungsi sering mengembalikan None untuk menandakan tidak ada hasil:
deffind_user(user_id):return db.get(user_id,None)Didukung oleh
Saat menulis percabangan, utamakan 'if x is None' daripada 'if not x' agar Anda tidak secara keliru memperlakukan 0, False, atau string kosong sebagai nilai yang hilang. Untuk latar belakang lebih lanjut tentang dasar-dasar Python yang berinteraksi dengan None, lihat tutorial Operators in Python kami atau Python Classes Tutorial kami.
Kesalahan Umum dan Teknik Pemecahan Masalah
Meski merupakan konsep yang sederhana, None kerap menimbulkan bug kecil. Ini biasanya muncul ketika sebuah variabel yang Anda kira memiliki nilai nyata ternyata kosong, yang dapat menyebabkan perilaku tak terduga atau error saat runtime.
Mencoba mengakses atribut atau memanggil metode pada nilai None adalah salah satu kesalahan paling umum. Bergantung pada apa yang Anda coba lakukan, ini akan menimbulkan AttributeError atau TypeError:
name =None
name.strip()# AttributeError: 'NoneType' object has no attribute 'strip'Didukung oleh
Untuk menghindari kejutan seperti ini, telusuri di mana variabel terakhir kali di-assign dan periksa nilai return yang hilang. Pemeriksaan defensif itu sederhana dan efektif:
if name isnotNone:
cleaned = name.strip()Didukung oleh
Penting juga untuk membedakan antara None dan nilai false. None berarti “tidak disetel,” sedangkan 0, “”, atau [] adalah nilai yang valid. Tutorial seperti How to Run Python Scripts dan Python New Line: Methods for Code Formatting dapat membantu mengasah keterampilan debugging Anda saat berlatih.
Type Hint dan Pengembangan Python Modern
Dengan type hint, Anda dapat membuat peran None menjadi eksplisit dalam tanda tangan fungsi. Anotasi Optional adalah cara yang jelas untuk melakukan ini:
Pemeriksa tipe statis seperti mypy dan Pyright kemudian dapat menandai kemungkinan masalah None sebelum runtime. Jika Anda sedang transisi dari lingkungan lain, kursus seperti Intermediate Python for Developers atau Applied Statistics in Python memberikan latihan yang baik dengan fitur-fitur modern ini.
Topik Lanjutan dan Kasus Tepi
Di luar penggunaan sehari-hari, None juga berperan dalam skenario pemrograman lanjutan. Perilakunya memengaruhi caching, metaprogramming, manajemen memori, dan bahkan konkurensi.
Dalam sistem caching atau memoization, None sering digunakan untuk menandai bahwa sebuah komputasi belum dijalankan atau tidak ada hasil yang valid. Misalnya, pola inisialisasi malas (lazy initialization) dapat mengandalkan None untuk memicu penyiapan yang ditunda:
classLazyLoader:def__init__(self):
self._data =Nonedefget_data(self):if self._data isNone:
self._data = expensive_computation()return self._dataDidukung oleh
Dalam serialisasi, None dipetakan ke null dalam JSON dan ke NULL dalam SQL. ORM seperti Django ORM atau SQLAlchemy menangani konversi ini secara otomatis, tetapi tetap layak untuk menguji kasus-kasusnya.
Konkurensi menambah kompleksitas. Jika beberapa thread atau tugas async berbagi variabel yang diinisialisasi dengan None, Anda memerlukan kunci (lock) atau sinkronisasi yang tepat untuk mencegah kondisi balapan. Framework seperti Python NiceGUI menyoroti bagaimana penanganan nilai opsional yang cermat sama pentingnya di aplikasi front-end atau interaktif.
Pertimbangan Kinerja dan Optimasi
Sekarang setelah kita melihat bagaimana None bekerja dalam praktik, ada baiknya meninjau profil kinerjanya. Karena None tertanam kuat dalam runtime Python, cara implementasinya berdampak langsung pada kecepatan dan penggunaan memori.
Pemeriksaan identitas terhadap None termasuk operasi tercepat yang dapat Anda lakukan. Karena hanya ada satu objek None di memori, pernyataan seperti if x is None hanyalah membandingkan dua referensi. Sebaliknya, menggunakan kesetaraan (== None) memanggil metode perbandingan objek, yang lebih lambat dan kurang presisi.
Desain singleton juga berkontribusi pada efisiensi memori. Berapa pun banyaknya variabel yang disetel ke None, semuanya menunjuk ke objek yang sama. Dalam aplikasi besar yang sering melewatkan nilai hilang, seperti kueri basis data yang mengembalikan kolom kosong atau API yang menghilangkan data, desain ini mencegah duplikasi yang tidak perlu di memori.
Menggunakan None sebagai argumen default atau nilai kembalian tidak menambah overhead. Fungsi yang tidak menentukan nilai kembalian akan otomatis mengembalikan None, dan ini selalu merujuk ke singleton yang sama. Ini membuat pemanggilan fungsi dapat diprediksi dari segi biaya.
Pada level interpreter, CPython menyertakan pintasan yang memanfaatkan status unik None. Misalnya, makro Py_RETURN_NONE memastikan objek yang sama dikembalikan setiap saat, menghindari alokasi baru. Peningkatan interpreter yang lebih baru juga memanfaatkan sifat immutability ini untuk membuat pemeriksaan dan pengembalian lebih cepat.
Praktik Terbaik untuk Penanganan None
Setelah mengeksplorasi kinerja, mari beralih ke panduan praktis untuk bekerja dengan None dalam kode sehari-hari. Penanganan None yang konsisten sangat membantu menjaga proyek tetap andal dan mudah dirawat.
Prinsip pertama adalah gunakan None hanya ketika sesuatu benar-benar tidak ada. Ini tidak boleh berfungsi sebagai placeholder umum. Jika Anda perlu menandai status khusus yang berbeda dari “tanpa nilai,” definisikan objek sentinel yang unik. Ini menjaga niat tetap jelas dan menghindari kebingungan ketika None sudah memiliki makna spesifik.
Membuat antarmuka Anda eksplisit juga membantu. Ketika sebuah fungsi mungkin mengembalikan None, tunjukkan itu pada tanda tangan dengan type hint seperti str | None, dan jelaskan perilakunya di docstring. Hal yang sama berlaku untuk parameter: jika None adalah input yang dapat diterima, sebutkan secara eksplisit. Kejelasan ini membantu baik analis statis maupun pengembang lain yang membaca kode Anda.
Penanganan error juga perlu perhatian yang sama. Jika None adalah hasil yang normal, periksa langsung menggunakan is None dan tangani dengan baik. Jika None menandakan bahwa ada sesuatu yang salah, naikkan exception alih-alih mengembalikan diam-diam. Ini membuat kegagalan lebih mudah dideteksi dan di-debug.
Terakhir, jadikan dokumentasi bagian dari alur kerja. Catat kapan fungsi atau metode mengembalikan None, mengapa itu terjadi, dan apa yang harus dilakukan pemanggil sebagai respons. Dengan memperlakukan None secara konsisten dan mendokumentasikan penggunaannya, Anda meminimalkan ambiguitas dan meningkatkan kualitas keseluruhan basis kode Anda.
Integrasi dengan Ekosistem Python Modern
Framework seperti Django dan Flask sangat bergantung pada None untuk merepresentasikan nilai yang hilang atau opsional. Di Django, field model dengan null=True menerjemahkan nilai SQL NULL langsung menjadi Python None. Di Flask, parser JSON memetakan null pada permintaan masuk menjadi None, sehingga handler rute Anda harus memeriksanya secara eksplisit.
Basis data menangani None dengan memetakannya ke NULL. ORM mengurus ini secara otomatis, tetapi Anda harus selalu cermat apakah sebuah field boleh bernilai null.
API harus mendefinisikan bagaimana None diserialisasi: apakah Anda menghilangkan field opsional atau menyertakannya dengan null? Konsistensi membuat kode klien lebih sederhana. Alat seperti OpenAPI membantu mendokumentasikan ini dengan jelas.
Framework pengujian dan pustaka validasi data (Pydantic, Marshmallow) juga terintegrasi erat dengan None. Mereka memungkinkan Anda mendefinisikan field opsional, menegakkan aturan, dan gagal lebih awal ketika input tidak sesuai harapan.
None vs. Null dan Bahasa Lain
None di Python mirip dengan NULL di SQL, Java, dan C, tetapi berperilaku berbeda. Di SQL, NULL berarti tidak diketahui atau hilang. Di Java, null merepresentasikan ketiadaan objek, tetapi melakukan dereference padanya menyebabkan error. Di C, NULL hanyalah pointer nol.
JavaScript membedakan antara null (nilai kosong yang disengaja) dan undefined (belum di-assign). Kesetaraan longgar (null == undefined) bernilai true, yang bisa membingungkan:
Dalam beberapa kasus, alternatif terstruktur terhadap None lebih jelas. Gaya pemrograman fungsional menggunakan tipe seperti Maybe, Result, atau Either untuk merepresentasikan nilai opsional atau rentan terhadap error. Python tidak menyertakan ini secara bawaan, tetapi pustaka tersedia jika Anda menginginkan penanganan yang lebih ketat.
Pendekatan lain adalah menggunakan objek sentinel. Berbeda dengan None, ini dapat merepresentasikan status seperti “belum disetel” tanpa berbenturan dengan input None yang valid.
Meskipun None nyaman di banyak tempat, berhati-hatilah dengan pemeriksaan truthy/falsy. None, 0, False, dan "" semuanya dievaluasi sebagai false, tetapi tidak dapat dipertukarkan. Gunakan is None ketika yang Anda maksud adalah ketiadaan.
None memainkan peran sentral dalam desain Python. Dari efisiensi memori dan keamanan tipe hingga integrasi basis data dan API, None secara konsisten merepresentasikan ketiadaan nilai secara disengaja.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Kembangkan keterampilan statistik Anda dan pelajari cara mengumpulkan, menganalisis, serta menarik kesimpulan yang akurat dari data menggunakan Python.
Di Python,
Noneadalah cara standar untuk merepresentasikan ketiadaan nilai. Ini muncul saat data hilang, ketika sebuah variabel belum diinisialisasi, atau ketika sebuah fungsi tidak memiliki hasil bermakna untuk dikembalikan. Alih-alih menyisakan ambiguitas,Nonememberikan sinyal jelas bahwa sesuatu sengaja dibiarkan kosong.Bahasa lain mengambil pendekatan serupa dengan konstruk seperti
nulldi Java dan JavaScript ataunildi Ruby. Namun, Python mendefinisikan None sebagai singleton dari tipe miliknya sendiri,NoneType, yang selalu diperiksa dengan uji identitas (is None). Ini menjaga perilakunya tetap konsisten dan lugas.Jika Anda masih membangun dasar Python, sumber daya kami seperti Introduction to Python dan Python Cheat Sheet for Beginners adalah tempat yang baik untuk memulai. Jika Anda seorang pengembang dari ekosistem lain, Anda juga bisa mendapat manfaat dari panduan transisi seperti Python for MATLAB Users, Python for R Users, dan Python for Spreadsheet Users.
Arsitektur Teknis dan Detail Implementasi
Pada intinya,
Noneadalah satu-satunya instance dari kelasNoneType. Python menerapkan pola singleton di sini: setiap referensi keNonemenunjuk ke objek yang sama. Ini menghemat memori dan memastikan bahwa pemeriksaan identitas (is None) andal dan cepat.Kelas
NoneTypesengaja dibuat minimal. Kelas ini tidak dapat diturunkan, diperluas, atau diubah. Secara internal, Python memperlakukanNonesebagai abadi; ia tidak pernah di-garbage-collect. Pada level C, ini diimplementasikan sebagaiPy_None, dengan makro pembantu sepertiPy_RETURN_NONEyang digunakan untuk efisiensi dalam ekstensi CPython.Pola Penggunaan Praktis dan Praktik Terbaik
Penggunaan sehari-hari untuk
Noneadalah sebagai parameter default dalam fungsi. Ini menghindari jebakan argumen default yang bisa berubah:Pola ini mencegah nilai bertahan secara tak terduga antar pemanggilan. Anda juga akan menjumpai
Nonedalam pencarian kamus (dictionary) dan respons API. Sebagai contoh,my_dict.get("key")mengembalikanNoneketika key tidak ada. Demikian pula, fungsi sering mengembalikanNoneuntuk menandakan tidak ada hasil:Saat menulis percabangan, utamakan 'if x is None' daripada 'if not x' agar Anda tidak secara keliru memperlakukan
0,False, atau string kosong sebagai nilai yang hilang. Untuk latar belakang lebih lanjut tentang dasar-dasar Python yang berinteraksi denganNone, lihat tutorial Operators in Python kami atau Python Classes Tutorial kami.Kesalahan Umum dan Teknik Pemecahan Masalah
Meski merupakan konsep yang sederhana,
Nonekerap menimbulkan bug kecil. Ini biasanya muncul ketika sebuah variabel yang Anda kira memiliki nilai nyata ternyata kosong, yang dapat menyebabkan perilaku tak terduga atau error saat runtime.Mencoba mengakses atribut atau memanggil metode pada nilai
Noneadalah salah satu kesalahan paling umum. Bergantung pada apa yang Anda coba lakukan, ini akan menimbulkanAttributeErroratauTypeError:Untuk menghindari kejutan seperti ini, telusuri di mana variabel terakhir kali di-assign dan periksa nilai return yang hilang. Pemeriksaan defensif itu sederhana dan efektif:
Penting juga untuk membedakan antara
Nonedan nilai false.Noneberarti “tidak disetel,” sedangkan0,“”, atau[]adalah nilai yang valid. Tutorial seperti How to Run Python Scripts dan Python New Line: Methods for Code Formatting dapat membantu mengasah keterampilan debugging Anda saat berlatih.Type Hint dan Pengembangan Python Modern
Dengan type hint, Anda dapat membuat peran
Nonemenjadi eksplisit dalam tanda tangan fungsi. AnotasiOptionaladalah cara yang jelas untuk melakukan ini:Pemeriksa tipe statis seperti
mypydanPyrightkemudian dapat menandai kemungkinan masalahNonesebelum runtime. Jika Anda sedang transisi dari lingkungan lain, kursus seperti Intermediate Python for Developers atau Applied Statistics in Python memberikan latihan yang baik dengan fitur-fitur modern ini.Topik Lanjutan dan Kasus Tepi
Di luar penggunaan sehari-hari,
Nonejuga berperan dalam skenario pemrograman lanjutan. Perilakunya memengaruhi caching, metaprogramming, manajemen memori, dan bahkan konkurensi.Dalam sistem caching atau memoization,
Nonesering digunakan untuk menandai bahwa sebuah komputasi belum dijalankan atau tidak ada hasil yang valid. Misalnya, pola inisialisasi malas (lazy initialization) dapat mengandalkanNoneuntuk memicu penyiapan yang ditunda:Dalam serialisasi,
Nonedipetakan kenulldalam JSON dan keNULLdalam SQL. ORM seperti Django ORM atau SQLAlchemy menangani konversi ini secara otomatis, tetapi tetap layak untuk menguji kasus-kasusnya.Konkurensi menambah kompleksitas. Jika beberapa thread atau tugas async berbagi variabel yang diinisialisasi dengan
None, Anda memerlukan kunci (lock) atau sinkronisasi yang tepat untuk mencegah kondisi balapan. Framework seperti Python NiceGUI menyoroti bagaimana penanganan nilai opsional yang cermat sama pentingnya di aplikasi front-end atau interaktif.Pertimbangan Kinerja dan Optimasi
Sekarang setelah kita melihat bagaimana
Nonebekerja dalam praktik, ada baiknya meninjau profil kinerjanya. KarenaNonetertanam kuat dalam runtime Python, cara implementasinya berdampak langsung pada kecepatan dan penggunaan memori.Pemeriksaan identitas terhadap
Nonetermasuk operasi tercepat yang dapat Anda lakukan. Karena hanya ada satu objekNonedi memori, pernyataan sepertiif x is Nonehanyalah membandingkan dua referensi. Sebaliknya, menggunakan kesetaraan (== None) memanggil metode perbandingan objek, yang lebih lambat dan kurang presisi.Desain singleton juga berkontribusi pada efisiensi memori. Berapa pun banyaknya variabel yang disetel ke
None, semuanya menunjuk ke objek yang sama. Dalam aplikasi besar yang sering melewatkan nilai hilang, seperti kueri basis data yang mengembalikan kolom kosong atau API yang menghilangkan data, desain ini mencegah duplikasi yang tidak perlu di memori.Menggunakan
Nonesebagai argumen default atau nilai kembalian tidak menambah overhead. Fungsi yang tidak menentukan nilai kembalian akan otomatis mengembalikanNone, dan ini selalu merujuk ke singleton yang sama. Ini membuat pemanggilan fungsi dapat diprediksi dari segi biaya.Pada level interpreter, CPython menyertakan pintasan yang memanfaatkan status unik
None. Misalnya, makroPy_RETURN_NONEmemastikan objek yang sama dikembalikan setiap saat, menghindari alokasi baru. Peningkatan interpreter yang lebih baru juga memanfaatkan sifat immutability ini untuk membuat pemeriksaan dan pengembalian lebih cepat.Praktik Terbaik untuk Penanganan None
Setelah mengeksplorasi kinerja, mari beralih ke panduan praktis untuk bekerja dengan
Nonedalam kode sehari-hari. PenangananNoneyang konsisten sangat membantu menjaga proyek tetap andal dan mudah dirawat.Prinsip pertama adalah gunakan
Nonehanya ketika sesuatu benar-benar tidak ada. Ini tidak boleh berfungsi sebagai placeholder umum. Jika Anda perlu menandai status khusus yang berbeda dari “tanpa nilai,” definisikan objek sentinel yang unik. Ini menjaga niat tetap jelas dan menghindari kebingungan ketikaNonesudah memiliki makna spesifik.Membuat antarmuka Anda eksplisit juga membantu. Ketika sebuah fungsi mungkin mengembalikan
None, tunjukkan itu pada tanda tangan dengan type hint sepertistr | None, dan jelaskan perilakunya di docstring. Hal yang sama berlaku untuk parameter: jikaNoneadalah input yang dapat diterima, sebutkan secara eksplisit. Kejelasan ini membantu baik analis statis maupun pengembang lain yang membaca kode Anda.Penanganan error juga perlu perhatian yang sama. Jika
Noneadalah hasil yang normal, periksa langsung menggunakanis Nonedan tangani dengan baik. JikaNonemenandakan bahwa ada sesuatu yang salah, naikkan exception alih-alih mengembalikan diam-diam. Ini membuat kegagalan lebih mudah dideteksi dan di-debug.Terakhir, jadikan dokumentasi bagian dari alur kerja. Catat kapan fungsi atau metode mengembalikan None, mengapa itu terjadi, dan apa yang harus dilakukan pemanggil sebagai respons. Dengan memperlakukan None secara konsisten dan mendokumentasikan penggunaannya, Anda meminimalkan ambiguitas dan meningkatkan kualitas keseluruhan basis kode Anda.
Integrasi dengan Ekosistem Python Modern
Framework seperti Django dan Flask sangat bergantung pada
Noneuntuk merepresentasikan nilai yang hilang atau opsional. Di Django, field model dengannull=Truemenerjemahkan nilai SQL NULL langsung menjadi Python None. Di Flask, parser JSON memetakan null pada permintaan masuk menjadi None, sehingga handler rute Anda harus memeriksanya secara eksplisit.Basis data menangani None dengan memetakannya ke
NULL. ORM mengurus ini secara otomatis, tetapi Anda harus selalu cermat apakah sebuah field boleh bernilai null.API harus mendefinisikan bagaimana None diserialisasi: apakah Anda menghilangkan field opsional atau menyertakannya dengan null? Konsistensi membuat kode klien lebih sederhana. Alat seperti OpenAPI membantu mendokumentasikan ini dengan jelas.
Framework pengujian dan pustaka validasi data (Pydantic, Marshmallow) juga terintegrasi erat dengan None. Mereka memungkinkan Anda mendefinisikan field opsional, menegakkan aturan, dan gagal lebih awal ketika input tidak sesuai harapan.
None vs. Null dan Bahasa Lain
Nonedi Python mirip denganNULLdi SQL, Java, dan C, tetapi berperilaku berbeda. Di SQL,NULLberarti tidak diketahui atau hilang. Di Java,nullmerepresentasikan ketiadaan objek, tetapi melakukan dereference padanya menyebabkan error. Di C,NULLhanyalah pointer nol.JavaScript membedakan antara null (nilai kosong yang disengaja) dan undefined (belum di-assign). Kesetaraan longgar (null == undefined) bernilai true, yang bisa membingungkan:
Python menghindari ambiguitas ini dengan berpegang pada satu konsep:
Untuk tinjauan lebih luas tentang posisi Python dalam spektrum, lihat Anaconda vs Python atau What Can You Do With Python?
Alternatif dan Pola Lanjutan
Dalam beberapa kasus, alternatif terstruktur terhadap
Nonelebih jelas. Gaya pemrograman fungsional menggunakan tipe sepertiMaybe,Result, atauEitheruntuk merepresentasikan nilai opsional atau rentan terhadap error. Python tidak menyertakan ini secara bawaan, tetapi pustaka tersedia jika Anda menginginkan penanganan yang lebih ketat.Pendekatan lain adalah menggunakan objek sentinel. Berbeda dengan
None, ini dapat merepresentasikan status seperti “belum disetel” tanpa berbenturan dengan inputNoneyang valid.Meskipun
Nonenyaman di banyak tempat, berhati-hatilah dengan pemeriksaan truthy/falsy.None,0,False, dan""semuanya dievaluasi sebagai false, tetapi tidak dapat dipertukarkan. Gunakanis Noneketika yang Anda maksud adalah ketiadaan.Untuk lebih banyak pola seperti ini, lihat panduan fungsi Python any() dan Tutorial Python lambda kami, yang mengeksplorasi bagaimana nilai opsional dan default muncul dalam kode nyata.
Kesimpulan
Nonememainkan peran sentral dalam desain Python. Dari efisiensi memori dan keamanan tipe hingga integrasi basis data dan API,Nonesecara konsisten merepresentasikan ketiadaan nilai secara disengaja.Jika Anda siap untuk terus membangun keterampilan Python, sumber daya kami seperti Introduction to Importing Data in Python, Intermediate Importing Data in Python, dan Importing Data in Python Cheat Sheet merupakan langkah lanjutan yang alami.