Lewati ke konten utama

if __name__ == "__main__" Python: Penjelasan Lengkap

Blok if __name__ == "__main__" dalam Python memungkinkan Anda mendefinisikan kode yang hanya akan dijalankan ketika file dieksekusi langsung sebagai skrip, tetapi tidak saat diimpor sebagai modul ke skrip lain.
Diperbarui 28 Sep 2026  · 8 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Blok kondisional yang dimulai dengan if __name__ == "__main__" sering muncul dalam kode Python. Baris ini bisa terlihat membingungkan, dan banyak pemula menggunakannya tanpa tahu apa fungsinya atau apakah mereka seharusnya menggunakannya. Pemrogram yang berasal dari bahasa lain juga bisa salah paham dan terlalu sering menggunakan idiom ini.

Tutorial ini membahas makna idiom Python if__name__ == "__main__" dan mengeksplorasi bagaimana serta kapan menggunakannya.

Memahami __name__ dan "__main__"

Idiom if __name__ == "__main__" adalah sebuah pernyataan if yang memeriksa kesetaraan.

Operand pertama di sebelah kiri operator kesetaraan == adalah atribut __name__. Nama Python dengan garis bawah ganda di awal dan akhir adalah pengenal khusus. Setiap modul memiliki atribut __name__. Python menetapkan variabel ini ke nama modul, yang digunakan sistem impor Python untuk mengidentifikasi setiap modul secara unik.

Namun, jika modul berada di lingkungan kode tingkat atas, yang berarti modul tersebut digunakan sebagai titik masuk program, Python menetapkan atribut __name__ ke string "__main__".

Mari lihat beberapa contoh. Buat skrip bernama exploring_name_main.py:

# exploring_name_main.py
import random
print(__name__)
print(random.__name__)

Skrip ini dapat dijalankan langsung menggunakan perintah berikut di terminal:

$ python exploring_name_main.py
__main__
random

Skrip exploring_name_main.py berada di lingkungan kode tingkat atas karena menjadi titik masuk program. Oleh karena itu, variabel __name__ diatur ke string "__main__".

Namun, modul random diimpor dan tidak berada di lingkungan kode tingkat atas. Atribut __name__-nya diatur ke nama modul.

Selanjutnya, kita membuat skrip baru bernama more_exploration.py, yang mengimpor skrip pertama:

# more_exploration.py
import exploring_name_main

Jalankan skrip ini menggunakan perintah berikut di terminal:

$ python more_exploration.py
exploring_name_main
random

Kode dalam sebuah modul dieksekusi saat modul tersebut diimpor. Karena itu, ketika menjalankan more_exploration.py, kode menampilkan keluaran dari dua pemanggilan print() di exploring_name_main.py. Karena exploring_name_main.py tidak lagi menjadi titik masuk program, atribut __name__-nya diatur ke nama skrip alih-alih "__main__".

Blok Kondisional if __name__ == "__main__"

Variabel __name__ dapat digunakan untuk menentukan apakah suatu modul adalah titik masuk utama program. Dengan demikian, sebuah modul dapat menyertakan kode yang hanya dieksekusi ketika dijalankan langsung sebagai skrip tetapi tidak saat diimpor. Kode apa pun yang seharusnya hanya dieksekusi ketika skrip dijalankan langsung dimasukkan dalam blok kondisional if __name__ == "__main__":

# exploring_name_main.py
import random
print(__name__)
print(random.__name__)
number = random.randint(1, 10)
if __name__ == "__main__":
    print("This script is in the top-level code environment")
    print(f"The number is {number}")

Kode di exploring_name_main.py kini menyertakan blok kondisional if __name__ == "__main__". Mari lihat apakah ini membuat perbedaan saat menjalankan skrip:

$ python exploring_name_main.py
__main__
random
This script is in the top-level code environment
The number is 10

Ketika skrip dijalankan langsung, variabel __name__ diatur ke string "__main__". Karena itu, kondisi dalam pernyataan if bernilai True, dan Python mengeksekusi kode di dalam blok if.

Namun, ketika modul diimpor, __name__ diatur ke nama modul, dan program tidak mengeksekusi blok if. Ingat bahwa skrip more_exploration.py mengimpor exploring_name_main:

$  python more_exploration.py
exploring_name_main
random

Program tidak memanggil fungsi print() di exploring_name_main.py. Fungsi-fungsi tersebut berada dalam blok kondisional yang tidak dieksekusi karena __name__ tidak sama dengan "__main__".

Praktik Terbaik dan Tips Saat Menggunakan if __name__ == "__main__" di Python

Idiom if __name__ == "__main__" di Python digunakan ketika kode harus dieksekusi hanya saat sebuah file dijalankan sebagai skrip, bukan saat diimpor sebagai modul. Perbedaan antara istilah skrip dan modul hanya pada bagaimana file tersebut digunakan. Keduanya merujuk pada file dengan ekstensi .py.

Kasus penggunaan umum adalah ketika sebuah skrip memiliki variabel, fungsi, dan kelas yang mungkin digunakan dalam program lain. Berikut contoh menggunakan skrip bernama shapes.py:

# shapes.py
import math
def find_area_of_circle(radius):
    return math.pi * radius ** 2
def find_area_of_rectangle(width, height):
    return width * height
if __name__ == "__main__":
    shape = int(input("Enter 1 for circle, 2 for rectangle: "))
    if shape == 1:
        radius = int(input("Enter radius: "))
        print(f"The area of the circle is {find_area_of_circle(radius)}")
    elif shape == 2:
        width = int(input("Enter width: "))
        height = int(input("Enter height: "))
        print(f"The area of the rectangle is {find_area_of_rectangle(width, height)}")
Enter 1 for circle, 2 for rectangle: 2
Enter width: 10
Enter height: 20
The area of the rectangle is 200

Kode ini tidak memerlukan idiom if __name__ == "__main__" jika tujuannya selalu menjalankannya sebagai skrip. Namun, penyertaan pernyataan kondisional ini memungkinkan kode diimpor sebagai modul tanpa mengeksekusi baris-baris dalam blok if. Pertimbangkan skrip lain bernama more_shapes.py:

# more_shapes.py
import shapes
radius = 5
print(f"The area of the circle defined in 'more_shapes.py' is: "
      f"{shapes.find_area_of_circle(radius)}")
The area of the circle defined in 'more_shapes.py' is: 78.53981633974483

Skrip baru ini, more_shapes.py, memiliki akses ke fungsi-fungsi yang didefinisikan di shapes.py karena pernyataan impor. Namun, kode di blok if __name__ == "__main__" pada shapes.py tidak dieksekusi. Tanpa pernyataan if di shapes.py, seluruh kode akan dieksekusi saat modul diimpor.

Menggunakan blok if __name__ == "__main__" untuk input pengguna adalah kasus penggunaan yang umum. Input pengguna diabaikan jika file diimpor sebagai modul tetapi disertakan ketika dieksekusi langsung sebagai kode tingkat atas.

Menggunakan fungsi main()

Praktik terbaik adalah menyertakan sesedikit mungkin pernyataan dalam blok if __name__ == "__main__" karena ini membuat kode lebih mudah dibaca. Cara umum untuk mencapainya adalah membuat sebuah fungsi, yang dipanggil dalam blok kondisional. Umumnya fungsi ini diberi nama main(), tetapi nama fungsi apa pun valid:

# shapes.py
import math
def find_area_of_circle(radius):
    return math.pi * radius ** 2
def find_area_of_rectangle(width, height):
    return width * height
def main():
    shape = int(input("Enter 1 for circle, 2 for rectangle: "))
    if shape == 1:
        radius = int(input("Enter radius: "))
        print(f"The area of the circle is {find_area_of_circle(radius)}")
    elif shape == 2:
        width = int(input("Enter width: "))
        height = int(input("Enter height: "))
        print(f"The area of the rectangle is {find_area_of_rectangle(width, height)}")
       
if __name__ == "__main__":
    main()

Kode dalam fungsi main() sama dengan kode yang sebelumnya disertakan langsung dalam blok if __name__ == "__main__" pada versi kode sebelumnya.

Dalam Python, fungsi main() tidak diwajibkan sebagai titik masuk utama program, tidak seperti beberapa bahasa pemrograman lain. Oleh karena itu, penggunaan main() dan idiom if __name__ == "__main__" bersifat opsional, dan hanya diperlukan ketika kode dimaksudkan untuk digunakan baik sebagai skrip mandiri maupun sebagai modul.

Kasus penggunaan umum lainnya untuk if __name__ == "__main__" di Python adalah untuk menyertakan pengujian pada skrip. Pengujian akan dijalankan ketika skrip dieksekusi langsung tetapi tidak saat diimpor dari modul lain. Namun, meskipun pendekatan ini cocok untuk kasus sederhana, sebaiknya pengujian disertakan dalam modul terpisah yang didedikasikan untuk pengujian.

Kesimpulan

if __name__ == "__main__" di Python berguna untuk menyertakan kode yang dieksekusi hanya ketika sebuah skrip dijalankan langsung tetapi tidak saat diimpor. Interpreter Python menetapkan variabel __name__ ke nama modul jika modul tersebut diimpor dan ke string "__main__" jika modul tersebut adalah titik masuk utama program.

Tidak seperti pada beberapa bahasa pemrograman lain, fungsi main() dan idiom if __name__ == "__main__" bukan persyaratan untuk menjalankan kode Python, melainkan alat yang dapat digunakan programmer bila diperlukan.


Stephen Gruppetta's photo
Author
Stephen Gruppetta
LinkedIn
Twitter

Saya belajar Fisika dan Matematika pada tingkat sarjana di University of Malta. Kemudian, saya pindah ke London dan meraih gelar PhD dalam bidang Fisika dari Imperial College. Saya meneliti teknik optik baru untuk memindai retina manusia. Sekarang, saya berfokus menulis tentang Python, berkomunikasi tentang Python, dan mengajar Python.

Topik
Python

Kursus Data Engineering Teratas

{count, plural, one {Program} other {Program}}

Data Engineer dalam Python

{hours} jam
Dapatkan keterampilan yang sangat dicari untuk mengelola data dengan efisien, termasuk mengimpor, membersihkan, mengelola data, serta menjadwalkan dan memantau pipeline, sehingga Anda dapat menonjol di bidang data engineering.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

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.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya