Import
Import merupakan proses pengambilan code dari file terpisah. Import bisa berupa module (satu file .py) maupun package (structured file .py), contoh berikut mengimport salah satu Python standard library
>>> import math
>>> math.pi
3.141592653589793
>>>
Import module
Untuk dapat mengimport module buatan sendiri, kita akan membuat struktur file seperti ini
- cooking
-- ingredients.py
-- main.py
Dalam file ingredients.py isi sebagai berikut
def bahan_gulai_ayam():
return ['ayam', 'santan', 'daun-daunan']
Dalam file main.py isi sebagai berikut
import ingredients
get_ingredient = ingredients.bahan_gulai_ayam()
print(get_ingredient)
Jalankan kode main.py maka hasilnya adalah
['ayam', 'santan', 'daun-daunan']
main.py bertindak sebagai file utama yang dijalankan, lalu mengimport module ingredients.py untuk mendapatkan isi dari module tersebut.
Import juga bisa di lakukan dengan syntax berikut
from ingredients import bahan_gulai_ayam
get_ingredient = bahan_gulai_ayam()
print(get_ingredient)
import diatas akan mengimport bahan_gulai_ayam secara langsung.
Perlu diingat apabila ada module yang saling mengimport satu sama lain maka Python akan mengeluarkan exception ImportError: circular import.
Import Package
Untuk dapat mengimport package, buatlah struktur folder seperti ini
- cooking
-- ingredients.py
- main.py
Perhatikan file main.py, file tersebut terletak diluar dan package yang akan di importkan adalah cooking.
File ingredients.py masih sama dengan sebelumnya, lanjut isi file main.py sebagai berikut
import cooking
get_ingredient = cooking.ingredients.bahan_gulai_ayam()
print(get_ingredient)
Ketika dijalankan main.py, akan terjadi error seperti ini
Traceback (most recent call last):
ingredient = cooking.ingredients
^^^^^^^^^^^^^^^^^^^
AttributeError: module 'cooking' has no attribute 'ingredients'
Hal tersebut terjadi dikarenakan Python tidak bisa mencari module ingredients.py dalam folder cooking.
Untuk membuat Python membaca subfolder menjadi package, tambahkan file __init__.py
- cooking
-- __init__.py
-- ingredients.py
- main.py
Isi file __init__.py sebagai berikut
from .ingredients import bahan_gulai_ayam
Dengan code ingredients.py masih sama, jalankan kembali main.py maka hasilnya sebagai berikut
['ayam', 'santan', 'bawang', 'daun-daunan']
Isi dari file __init__.py juga bisa di kosongkan atau dihapus, lalu ubah cara import di main.py menjadi seperti ini
from cooking import ingredients
get_ingredient = ingredients.bahan_gulai_ayam()
print(get_ingredient)
Penggunaan from dan import memiliki output yang berbeda, apabila melakukan import package maka kita bisa mengakses keseluruhan modul di dalam package (package.module1, package.module2, dst). Sedangkan from dengan contoh from package import module1 maka kita hanya bisa mengakses module1 saja.
Perbedaan cara import ini tidak ada batasan tertentu, developer bisa bebas untuk menggunakan cara yang berbeda.
Syntax executor
Dalam Python, kita bisa menentukan code yang akan dieksekusi ketika module atau file Python tersebut secara langsung (directly) dijalankan.
Perhatikan contoh berikut, buatlah folder dan struktur file seperti ini
- Foo
-- foo.py
-- bar.py
Isi code foo.py sebagai berikut
foo = "foo"
print(foo)
Lalu isi code bar.py sebagai berikut
import foo
bar = "bar"
print(bar)
Apabila dijalankan bar.py, maka hasilnya sebagai berikut
foo
bar
Dalam bar.py, kita melakukan import foo yang berarti semua line yang ada di foo.py akan dibawa, termasuk line print(foo). Sehingga output dari bar.py terdapat foo.
Ubah isi code foo.py menjadi sebagai berikut
foo = "foo"
if __name__ == "__main__":
print(foo)
Apabila dijalankan kembali bar.py, maka hasilnya menjadi seperti berikut
bar
Perhatikan isi code foo.py, terdapat syntax if __name__ == “__main__” yang berarti apabila foo.py di import ke module lain (bar.py) maka print(foo) tidak dijalankan. print(foo) hanya akan dijalankan ketika file foo.py dijalankan.
Referensi import bisa anda baca di sini https://docs.python.org/3/reference/import.html